Initial add of copied files
Probably not in a working state at the moment, but home-manager will build. Needs proper configuring to be used
This commit is contained in:
commit
10db59de2a
9
.gitignore
vendored
Normal file
9
.gitignore
vendored
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
*~
|
||||||
|
.\#*
|
||||||
|
\#*\#
|
||||||
|
*.swp
|
||||||
|
.python-version
|
||||||
|
.DS_Store
|
||||||
|
__pycache__
|
||||||
|
.direnv
|
||||||
|
*.html
|
3
.stylua.toml
Normal file
3
.stylua.toml
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
indent_type = "Spaces"
|
||||||
|
call_parentheses = "None"
|
||||||
|
collapse_simple_statement = "Always"
|
40
default.nix
Normal file
40
default.nix
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
{pkgs, ...}: {
|
||||||
|
imports = [
|
||||||
|
./bat/default.nix
|
||||||
|
./git/default.nix
|
||||||
|
./ssh/default.nix
|
||||||
|
./zsh/default.nix
|
||||||
|
./starship/default.nix
|
||||||
|
./bottom/default.nix
|
||||||
|
./emacs/default.nix
|
||||||
|
./scripts/default.nix
|
||||||
|
];
|
||||||
|
programs = {
|
||||||
|
bash.enable = true;
|
||||||
|
carapace.enable = true;
|
||||||
|
eza = {
|
||||||
|
enable = true;
|
||||||
|
enableAliases = true;
|
||||||
|
git = true;
|
||||||
|
icons = true;
|
||||||
|
extraOptions = ["--octal-permissions"];
|
||||||
|
};
|
||||||
|
readline = {
|
||||||
|
enable = true;
|
||||||
|
includeSystemConfig = true;
|
||||||
|
extraConfig = ''
|
||||||
|
set completion-ignore-case On
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
direnv = {
|
||||||
|
enable = true;
|
||||||
|
nix-direnv.enable = true;
|
||||||
|
};
|
||||||
|
fzf = {
|
||||||
|
enable = true;
|
||||||
|
defaultCommand = "${pkgs.fd}/bin/fd --type f";
|
||||||
|
changeDirWidgetCommand = "${pkgs.fd}/bin/fd --type d";
|
||||||
|
fileWidgetCommand = "${pkgs.fd}/bin/fd --type f";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
86
desktop.nix
Normal file
86
desktop.nix
Normal file
|
@ -0,0 +1,86 @@
|
||||||
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
catppuccinVariant ? "Mocha",
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
imports = [
|
||||||
|
./default.nix
|
||||||
|
./email/default.nix
|
||||||
|
./password-store/default.nix
|
||||||
|
./wlogout/default.nix
|
||||||
|
./waybar/default.nix
|
||||||
|
./rofi/default.nix
|
||||||
|
./swaylock/default.nix
|
||||||
|
./swaync/default.nix
|
||||||
|
./avizo/default.nix
|
||||||
|
./alacritty/default.nix
|
||||||
|
./emacs/default.nix
|
||||||
|
./nyxt/default.nix
|
||||||
|
./obs/default.nix
|
||||||
|
./cava/default.nix
|
||||||
|
./prog/default.nix
|
||||||
|
];
|
||||||
|
programs.rofi.terminal = "${config.programs.alacritty.package}/bin/alacritty";
|
||||||
|
services = {
|
||||||
|
gpg-agent.pinentryFlavor = "gtk2";
|
||||||
|
avizo.enable = true;
|
||||||
|
syncthing.enable = true;
|
||||||
|
udiskie = {
|
||||||
|
enable = true;
|
||||||
|
notify = true;
|
||||||
|
automount = true;
|
||||||
|
tray = "never";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
gtk = with lib.strings; let
|
||||||
|
accent = "Lavender";
|
||||||
|
size = "Standard";
|
||||||
|
in {
|
||||||
|
enable = true;
|
||||||
|
iconTheme = {
|
||||||
|
package = pkgs.catppuccin-papirus-folders.override {
|
||||||
|
accent = toLower accent;
|
||||||
|
flavor = toLower catppuccinVariant;
|
||||||
|
};
|
||||||
|
name = "Papirus-Dark";
|
||||||
|
};
|
||||||
|
cursorTheme = let
|
||||||
|
variant = "${lib.strings.toLower catppuccinVariant}Dark";
|
||||||
|
in {
|
||||||
|
package = pkgs.catppuccin-cursors.${variant};
|
||||||
|
name = "Catppuccin-${catppuccinVariant}-Dark-Cursors";
|
||||||
|
size = 32;
|
||||||
|
};
|
||||||
|
theme = {
|
||||||
|
package = with lib.strings;
|
||||||
|
pkgs.catppuccin-gtk.override {
|
||||||
|
accents = [(toLower accent)];
|
||||||
|
size = toLower size;
|
||||||
|
variant = toLower catppuccinVariant;
|
||||||
|
};
|
||||||
|
name = "Catppuccin-${catppuccinVariant}-${size}-${accent}-Dark";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
xresources.properties = with config.scheme.withHashtag; {
|
||||||
|
"*background" = base00;
|
||||||
|
"*foreground" = base05;
|
||||||
|
"*color0" = base00;
|
||||||
|
"*color1" = red;
|
||||||
|
"*color2" = green;
|
||||||
|
"*color3" = yellow;
|
||||||
|
"*color4" = blue;
|
||||||
|
"*color5" = magenta;
|
||||||
|
"*color6" = cyan;
|
||||||
|
"*color7" = base04;
|
||||||
|
"*color8" = base01;
|
||||||
|
"*color9" = red;
|
||||||
|
"*color10" = green;
|
||||||
|
"*color11" = yellow;
|
||||||
|
"*color12" = blue;
|
||||||
|
"*color13" = magenta;
|
||||||
|
"*color14" = cyan;
|
||||||
|
"*color15" = base05;
|
||||||
|
};
|
||||||
|
}
|
136
flake.lock
Normal file
136
flake.lock
Normal file
|
@ -0,0 +1,136 @@
|
||||||
|
{
|
||||||
|
"nodes": {
|
||||||
|
"base16": {
|
||||||
|
"inputs": {
|
||||||
|
"fromYaml": "fromYaml"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1709025227,
|
||||||
|
"narHash": "sha256-KXcORItjYJTdEO/BlBd0Uym1Xa3eBu43uvpFiWjJOdY=",
|
||||||
|
"owner": "SenchoPens",
|
||||||
|
"repo": "base16.nix",
|
||||||
|
"rev": "4e9b16c8b44958bc6bf46d99c3bb1b59c9c9c764",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "SenchoPens",
|
||||||
|
"repo": "base16.nix",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"fromYaml": {
|
||||||
|
"flake": false,
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1689549921,
|
||||||
|
"narHash": "sha256-iX0pk/uB019TdBGlaJEWvBCfydT6sRq+eDcGPifVsCM=",
|
||||||
|
"owner": "SenchoPens",
|
||||||
|
"repo": "fromYaml",
|
||||||
|
"rev": "11fbbbfb32e3289d3c631e0134a23854e7865c84",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "SenchoPens",
|
||||||
|
"repo": "fromYaml",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"home-manager": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": [
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1715381426,
|
||||||
|
"narHash": "sha256-wPuqrAQGdv3ISs74nJfGb+Yprm23U/rFpcHFFNWgM94=",
|
||||||
|
"owner": "nix-community",
|
||||||
|
"repo": "home-manager",
|
||||||
|
"rev": "ab5542e9dbd13d0100f8baae2bc2d68af901f4b4",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nix-community",
|
||||||
|
"ref": "release-23.11",
|
||||||
|
"repo": "home-manager",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"iosevka-custom": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": "nixpkgs"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1710589819,
|
||||||
|
"narHash": "sha256-fm69qycthevGExpbudpuCCSEBPuCOk/+d15382c37oE=",
|
||||||
|
"ref": "refs/heads/main",
|
||||||
|
"rev": "6e305fa1d05a97343d47f0b6865e10a870fc8d4e",
|
||||||
|
"revCount": 10,
|
||||||
|
"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": 1710451336,
|
||||||
|
"narHash": "sha256-pP86Pcfu3BrAvRO7R64x7hs+GaQrjFes+mEPowCfkxY=",
|
||||||
|
"owner": "nixos",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "d691274a972b3165335d261cc4671335f5c67de9",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nixos",
|
||||||
|
"ref": "nixos-unstable",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs_2": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1715218190,
|
||||||
|
"narHash": "sha256-R98WOBHkk8wIi103JUVQF3ei3oui4HvoZcz9tYOAwlk=",
|
||||||
|
"owner": "nixos",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "9a9960b98418f8c385f52de3b09a63f9c561427a",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nixos",
|
||||||
|
"ref": "nixos-23.11",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": {
|
||||||
|
"inputs": {
|
||||||
|
"base16": "base16",
|
||||||
|
"home-manager": "home-manager",
|
||||||
|
"iosevka-custom": "iosevka-custom",
|
||||||
|
"nixpkgs": "nixpkgs_2",
|
||||||
|
"tt-schemes": "tt-schemes"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"tt-schemes": {
|
||||||
|
"flake": false,
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1713388094,
|
||||||
|
"narHash": "sha256-wcotm0Ek2ISn8iJBzEujJQdcPLKWrPAOZ/dS/DLKafw=",
|
||||||
|
"owner": "tinted-theming",
|
||||||
|
"repo": "schemes",
|
||||||
|
"rev": "abcf2a055ae69f1bf047463332f83db3125aa8a5",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "tinted-theming",
|
||||||
|
"repo": "schemes",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": "root",
|
||||||
|
"version": 7
|
||||||
|
}
|
71
flake.nix
Normal file
71
flake.nix
Normal file
|
@ -0,0 +1,71 @@
|
||||||
|
{
|
||||||
|
description = "";
|
||||||
|
|
||||||
|
nixConfig = {
|
||||||
|
extra-substituters = ["https://nix.xenia.me.uk"];
|
||||||
|
extra-trusted-public-keys = ["nix.xenia.me.uk:tlgwOaG5KMLjQUk2YaErS8mAG69ZCr3PaHXZYi+Y5eI="];
|
||||||
|
};
|
||||||
|
|
||||||
|
inputs = {
|
||||||
|
nixpkgs.url = "github:nixos/nixpkgs/nixos-23.11";
|
||||||
|
home-manager = {
|
||||||
|
url = "github:nix-community/home-manager/release-23.11";
|
||||||
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
};
|
||||||
|
iosevka-custom.url = "git+https://git.xenia.me.uk/pixelifytica/iosevka.git";
|
||||||
|
base16.url = "github:SenchoPens/base16.nix";
|
||||||
|
tt-schemes = {
|
||||||
|
url = "github:tinted-theming/schemes";
|
||||||
|
flake = false;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
outputs = {
|
||||||
|
nixpkgs,
|
||||||
|
home-manager,
|
||||||
|
iosevka-custom,
|
||||||
|
base16,
|
||||||
|
tt-schemes,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
|
pkgs = import nixpkgs {system = "x86_64-linux";};
|
||||||
|
extraSpecialArgs = {
|
||||||
|
inherit tt-schemes;
|
||||||
|
accentColour = "base07"; # catppuccin lavender
|
||||||
|
catppuccinVariant = "Mocha";
|
||||||
|
fonts = with pkgs;
|
||||||
|
with iosevka-custom.outputs; rec {
|
||||||
|
sizes = {
|
||||||
|
applications = 12;
|
||||||
|
desktop = 10;
|
||||||
|
popups = 14;
|
||||||
|
terminal = 12;
|
||||||
|
};
|
||||||
|
serif = sansSerif;
|
||||||
|
sansSerif = {
|
||||||
|
name = names."iosevka-custom-aile";
|
||||||
|
package = packages.${system}."iosevka-custom-aile";
|
||||||
|
};
|
||||||
|
monospace = {
|
||||||
|
name = names."iosevka-custom-nerdfont";
|
||||||
|
package = packages.${system}."iosevka-custom-nerdfont";
|
||||||
|
};
|
||||||
|
emoji = {
|
||||||
|
name = "Noto Color Emoji";
|
||||||
|
package = noto-fonts-emoji;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
in {
|
||||||
|
inherit (home-manager) defaultPackage;
|
||||||
|
homeConfigurations = {
|
||||||
|
"pixelifytica" = home-manager.lib.homeManagerConfiguration {
|
||||||
|
inherit pkgs extraSpecialArgs;
|
||||||
|
modules = [
|
||||||
|
base16.homeManagerModule
|
||||||
|
./home.nix
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
20
home.nix
Normal file
20
home.nix
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
{
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
tt-schemes,
|
||||||
|
catppuccinVariant,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
imports = [
|
||||||
|
./home/default.nix
|
||||||
|
/etc/nixos/hosts/Northstar/home.nix
|
||||||
|
];
|
||||||
|
programs.home-manager.enable = true;
|
||||||
|
scheme = "${tt-schemes}/base16/catppuccin-${lib.strings.toLower catppuccinVariant}.yaml";
|
||||||
|
home = rec {
|
||||||
|
username = "pixelifytica";
|
||||||
|
homeDirectory = "/home/${username}";
|
||||||
|
stateVersion = "23.05";
|
||||||
|
};
|
||||||
|
}
|
75
programs/alacritty/catppuccin-mocha.toml
Normal file
75
programs/alacritty/catppuccin-mocha.toml
Normal file
|
@ -0,0 +1,75 @@
|
||||||
|
[colors.primary]
|
||||||
|
background = "#1E1E2E"
|
||||||
|
foreground = "#CDD6F4"
|
||||||
|
dim_foreground = "#CDD6F4"
|
||||||
|
bright_foreground = "#CDD6F4"
|
||||||
|
|
||||||
|
[colors.cursor]
|
||||||
|
text = "#1E1E2E"
|
||||||
|
cursor = "#F5E0DC"
|
||||||
|
|
||||||
|
[colors.vi_mode_cursor]
|
||||||
|
text = "#1E1E2E"
|
||||||
|
cursor = "#B4BEFE"
|
||||||
|
|
||||||
|
[colors.search.matches]
|
||||||
|
foreground = "#1E1E2E"
|
||||||
|
background = "#A6ADC8"
|
||||||
|
|
||||||
|
[colors.search.focused_match]
|
||||||
|
foreground = "#1E1E2E"
|
||||||
|
background = "#A6E3A1"
|
||||||
|
|
||||||
|
[colors.footer_bar]
|
||||||
|
foreground = "#1E1E2E"
|
||||||
|
background = "#A6ADC8"
|
||||||
|
|
||||||
|
[colors.hints.start]
|
||||||
|
foreground = "#1E1E2E"
|
||||||
|
background = "#F9E2AF"
|
||||||
|
|
||||||
|
[colors.hints.end]
|
||||||
|
foreground = "#1E1E2E"
|
||||||
|
background = "#A6ADC8"
|
||||||
|
|
||||||
|
[colors.selection]
|
||||||
|
text = "#1E1E2E"
|
||||||
|
background = "#F5E0DC"
|
||||||
|
|
||||||
|
[colors.normal]
|
||||||
|
black = "#45475A"
|
||||||
|
red = "#F38BA8"
|
||||||
|
green = "#A6E3A1"
|
||||||
|
yellow = "#F9E2AF"
|
||||||
|
blue = "#89B4FA"
|
||||||
|
magenta = "#F5C2E7"
|
||||||
|
cyan = "#94E2D5"
|
||||||
|
white = "#BAC2DE"
|
||||||
|
|
||||||
|
[colors.bright]
|
||||||
|
black = "#585B70"
|
||||||
|
red = "#F38BA8"
|
||||||
|
green = "#A6E3A1"
|
||||||
|
yellow = "#F9E2AF"
|
||||||
|
blue = "#89B4FA"
|
||||||
|
magenta = "#F5C2E7"
|
||||||
|
cyan = "#94E2D5"
|
||||||
|
white = "#A6ADC8"
|
||||||
|
|
||||||
|
[colors.dim]
|
||||||
|
black = "#45475A"
|
||||||
|
red = "#F38BA8"
|
||||||
|
green = "#A6E3A1"
|
||||||
|
yellow = "#F9E2AF"
|
||||||
|
blue = "#89B4FA"
|
||||||
|
magenta = "#F5C2E7"
|
||||||
|
cyan = "#94E2D5"
|
||||||
|
white = "#BAC2DE"
|
||||||
|
|
||||||
|
[[colors.indexed_colors]]
|
||||||
|
index = 16
|
||||||
|
color = "#FAB387"
|
||||||
|
|
||||||
|
[[colors.indexed_colors]]
|
||||||
|
index = 17
|
||||||
|
color = "#F5E0DC"
|
30
programs/alacritty/default.nix
Normal file
30
programs/alacritty/default.nix
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
{fonts, ...}: {
|
||||||
|
programs.alacritty = let
|
||||||
|
catppuccin-mocha = builtins.fromTOML (builtins.readFile ./catppuccin-mocha.toml);
|
||||||
|
in {
|
||||||
|
enable = true;
|
||||||
|
settings =
|
||||||
|
{
|
||||||
|
font = {
|
||||||
|
size = fonts.sizes.applications;
|
||||||
|
normal = {
|
||||||
|
family = fonts.monospace.name;
|
||||||
|
style = "Regular";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
window = {
|
||||||
|
opacity = 0.8;
|
||||||
|
dynamic_title = true;
|
||||||
|
padding = {
|
||||||
|
x = 10;
|
||||||
|
y = 10;
|
||||||
|
};
|
||||||
|
decorations = "none";
|
||||||
|
};
|
||||||
|
live_config_reload = false;
|
||||||
|
selection.save_to_clipboard = true;
|
||||||
|
mouse.hide_when_typing = false;
|
||||||
|
}
|
||||||
|
// catppuccin-mocha;
|
||||||
|
};
|
||||||
|
}
|
2021
programs/bat/catppuccinFrappe.tmTheme
Normal file
2021
programs/bat/catppuccinFrappe.tmTheme
Normal file
File diff suppressed because it is too large
Load diff
2021
programs/bat/catppuccinLatte.tmTheme
Normal file
2021
programs/bat/catppuccinLatte.tmTheme
Normal file
File diff suppressed because it is too large
Load diff
2021
programs/bat/catppuccinMacchiato.tmTheme
Normal file
2021
programs/bat/catppuccinMacchiato.tmTheme
Normal file
File diff suppressed because it is too large
Load diff
2021
programs/bat/catppuccinMocha.tmTheme
Normal file
2021
programs/bat/catppuccinMocha.tmTheme
Normal file
File diff suppressed because it is too large
Load diff
21
programs/bat/default.nix
Normal file
21
programs/bat/default.nix
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
{
|
||||||
|
lib,
|
||||||
|
catppuccinVariant ? "Mocha",
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
xdg.configFile = let
|
||||||
|
variants = ["Latte" "Frappe" "Macchiato" "Mocha"];
|
||||||
|
mkVariant = variant: let
|
||||||
|
fname = "catppuccin${variant}.tmTheme";
|
||||||
|
in {
|
||||||
|
name = "bat/themes/${fname}";
|
||||||
|
value = {source = ./. + "/${fname}";};
|
||||||
|
};
|
||||||
|
in
|
||||||
|
builtins.listToAttrs
|
||||||
|
(lib.lists.forEach variants mkVariant);
|
||||||
|
programs.bat = {
|
||||||
|
enable = true;
|
||||||
|
config.theme = "catppuccin${catppuccinVariant}";
|
||||||
|
};
|
||||||
|
}
|
35
programs/bottom/default.nix
Normal file
35
programs/bottom/default.nix
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
{
|
||||||
|
config,
|
||||||
|
accentColour ? "base07",
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
programs.bottom = {
|
||||||
|
enable = true;
|
||||||
|
settings.colors = with config.scheme.withHashtag; let
|
||||||
|
rainbow = [red yellow green cyan blue magenta];
|
||||||
|
in {
|
||||||
|
table_header_color = base05;
|
||||||
|
all_cpu_color = base05;
|
||||||
|
avg_cpu_color = base05;
|
||||||
|
cpu_core_colors = rainbow;
|
||||||
|
ram_color = red;
|
||||||
|
cache_color = green;
|
||||||
|
swap_color = blue;
|
||||||
|
rx_color = green;
|
||||||
|
tx_color = blue;
|
||||||
|
widget_title_color = config.scheme.withHashtag.${accentColour};
|
||||||
|
border_color = base02;
|
||||||
|
highlighted_border_color = config.scheme.withHashtag.${accentColour};
|
||||||
|
text_color = base05;
|
||||||
|
graph_color = base04;
|
||||||
|
cursor_color = base02;
|
||||||
|
selected_text_color = base05;
|
||||||
|
selected_bg_color = base01;
|
||||||
|
high_battery_color = green;
|
||||||
|
medium_battery_color = yellow;
|
||||||
|
low_battery_color = red;
|
||||||
|
gpu_core_colors = rainbow;
|
||||||
|
arc_color = cyan;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
17
programs/cava/default.nix
Normal file
17
programs/cava/default.nix
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
{config, ...}: {
|
||||||
|
programs.cava = {
|
||||||
|
enable = true;
|
||||||
|
settings = {
|
||||||
|
color = with config.scheme.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}'";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
172
programs/emacs/default.nix
Normal file
172
programs/emacs/default.nix
Normal file
|
@ -0,0 +1,172 @@
|
||||||
|
{
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
fonts,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
imports = [../git/default.nix];
|
||||||
|
programs.git.extraConfig.core.editor = "$EDITOR";
|
||||||
|
programs.emacs = {
|
||||||
|
# Clone emacs config from https://git.xenia.me.uk/pixelifytica/emacs.git
|
||||||
|
# git clone https://git.xenia.me.uk/pixelifytica/emacs.git ~/.config/emacs
|
||||||
|
enable = true;
|
||||||
|
package = pkgs.emacs29-pgtk;
|
||||||
|
extraConfig = let
|
||||||
|
shell = "${pkgs.zsh}/bin/zsh";
|
||||||
|
font = "${fonts.monospace.name}-${toString fonts.sizes.applications}";
|
||||||
|
fixed-font-family = "${fonts.monospace.name}";
|
||||||
|
variable-font-family = "${fonts.sansSerif.name}";
|
||||||
|
alpha = "80";
|
||||||
|
in ''
|
||||||
|
(customize-set-variable 'shell-file-name "${shell}")
|
||||||
|
(add-to-list 'initial-frame-alist '(font . "${font}"))
|
||||||
|
(add-to-list 'default-frame-alist '(font . "${font}"))
|
||||||
|
(set-face-attribute 'fixed-pitch nil :family "${fixed-font-family}")
|
||||||
|
(set-face-attribute 'fixed-pitch-serif nil :family "${fixed-font-family}")
|
||||||
|
(set-face-attribute 'variable-pitch nil :family "${variable-font-family}")
|
||||||
|
(add-to-list 'initial-frame-alist '(alpha-background . ${alpha}))
|
||||||
|
(add-to-list 'default-frame-alist '(alpha-background . ${alpha}))
|
||||||
|
(scroll-bar-mode -1)
|
||||||
|
(tab-bar-mode -1)
|
||||||
|
(menu-bar-mode -1)
|
||||||
|
'';
|
||||||
|
extraPackages = epkgs:
|
||||||
|
with epkgs; [
|
||||||
|
# Theme
|
||||||
|
base16-theme
|
||||||
|
|
||||||
|
# UI
|
||||||
|
all-the-icons
|
||||||
|
nerd-icons
|
||||||
|
nerd-icons-completion
|
||||||
|
nerd-icons-corfu
|
||||||
|
nerd-icons-dired
|
||||||
|
nerd-icons-ibuffer
|
||||||
|
doom-modeline
|
||||||
|
diminish
|
||||||
|
ligature
|
||||||
|
page-break-lines
|
||||||
|
helpful
|
||||||
|
which-key
|
||||||
|
link-hint
|
||||||
|
diff-hl
|
||||||
|
|
||||||
|
# Completion
|
||||||
|
cape
|
||||||
|
consult
|
||||||
|
consult-eglot
|
||||||
|
consult-flyspell
|
||||||
|
corfu
|
||||||
|
corfu-terminal
|
||||||
|
embark
|
||||||
|
embark-consult
|
||||||
|
marginalia
|
||||||
|
orderless
|
||||||
|
vertico
|
||||||
|
|
||||||
|
# Snippets
|
||||||
|
tempel
|
||||||
|
tempel-collection
|
||||||
|
|
||||||
|
# spell-checking
|
||||||
|
flyspell-correct
|
||||||
|
|
||||||
|
# password-store
|
||||||
|
pass
|
||||||
|
password-store
|
||||||
|
password-store-otp
|
||||||
|
|
||||||
|
# IDE
|
||||||
|
treesit-grammars.with-all-grammars
|
||||||
|
treesit-auto
|
||||||
|
flymake-popon
|
||||||
|
flymake-collection
|
||||||
|
flymake-eslint
|
||||||
|
flymake-shellcheck
|
||||||
|
apheleia
|
||||||
|
direnv
|
||||||
|
rainbow-delimiters
|
||||||
|
aggressive-indent
|
||||||
|
nix-mode
|
||||||
|
python-docstring
|
||||||
|
|
||||||
|
# Media
|
||||||
|
emms
|
||||||
|
|
||||||
|
# org-mode
|
||||||
|
org-roam
|
||||||
|
org-noter
|
||||||
|
org-journal
|
||||||
|
|
||||||
|
# org-cite
|
||||||
|
citar
|
||||||
|
citar-embark
|
||||||
|
|
||||||
|
# org-plot
|
||||||
|
gnuplot
|
||||||
|
|
||||||
|
# org-mode HTML export
|
||||||
|
htmlize
|
||||||
|
|
||||||
|
# Projects
|
||||||
|
ibuffer-project
|
||||||
|
magit
|
||||||
|
forge
|
||||||
|
|
||||||
|
# Writing
|
||||||
|
markdown-mode
|
||||||
|
pandoc-mode
|
||||||
|
auctex
|
||||||
|
auctex-latexmk
|
||||||
|
latex-preview-pane
|
||||||
|
|
||||||
|
# Email
|
||||||
|
mu4e
|
||||||
|
|
||||||
|
# RSS feeds
|
||||||
|
elfeed
|
||||||
|
elfeed-org
|
||||||
|
elfeed-tube
|
||||||
|
];
|
||||||
|
};
|
||||||
|
services = {
|
||||||
|
emacs = {
|
||||||
|
enable = true;
|
||||||
|
package = config.programs.emacs.finalPackage;
|
||||||
|
defaultEditor = true;
|
||||||
|
client.enable = true;
|
||||||
|
socketActivation.enable = true;
|
||||||
|
startWithUserSession = false;
|
||||||
|
};
|
||||||
|
git-sync.repositories = with config.xdg.userDirs; {
|
||||||
|
org = {
|
||||||
|
path = "${documents}/Org";
|
||||||
|
uri = "git+https://git.xenia.me.uk/xenia/org.git";
|
||||||
|
};
|
||||||
|
references = {
|
||||||
|
path = "${documents}/References";
|
||||||
|
uri = "git+https://git.xenia.me.uk/xenia/references.git";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
# Emacs requirements
|
||||||
|
imagemagick
|
||||||
|
languagetool
|
||||||
|
wordnet
|
||||||
|
gnuplot # For org-plot
|
||||||
|
graphviz # For org-roam graph
|
||||||
|
mp3info # For EMMS
|
||||||
|
|
||||||
|
# Language-specific requirements
|
||||||
|
sqlite
|
||||||
|
pandoc
|
||||||
|
ghostscript
|
||||||
|
poppler_utils
|
||||||
|
|
||||||
|
# Customised LaTeX install
|
||||||
|
(texlive.combine {
|
||||||
|
inherit (pkgs.texlive) scheme-medium dvisvgm dvipng wrapfig amsmath ulem hyperref capt-of;
|
||||||
|
})
|
||||||
|
];
|
||||||
|
}
|
39
programs/git/default.nix
Normal file
39
programs/git/default.nix
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
services.git-sync.enable = false; # Can't find pass for some reason...
|
||||||
|
programs.git = {
|
||||||
|
enable = true;
|
||||||
|
userName = "Evie Litherland-Smith";
|
||||||
|
userEmail = lib.mkDefault "evie@xenia.me.uk";
|
||||||
|
delta = {
|
||||||
|
enable = true;
|
||||||
|
options = {
|
||||||
|
line-numbers = true;
|
||||||
|
hyprlinks = true;
|
||||||
|
navigate = true;
|
||||||
|
side-by-side = true;
|
||||||
|
syntax-theme = with config.programs; lib.mkIf bat.enable bat.config.theme;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
attributes = [
|
||||||
|
"*.gpg filter=gpg diff=gpg"
|
||||||
|
"*.asc filter=gpg diff=gpg"
|
||||||
|
];
|
||||||
|
extraConfig = let
|
||||||
|
user = "pixelifytica";
|
||||||
|
in {
|
||||||
|
github = {inherit user;};
|
||||||
|
gitea = {inherit user;};
|
||||||
|
pull.rebase = false;
|
||||||
|
init.defaultBranch = "main";
|
||||||
|
merge.conflictstyle = "diff3";
|
||||||
|
diff = {
|
||||||
|
colorMoved = "default";
|
||||||
|
gpg.textconv = "gpg --no-tty --decrypt";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
12
programs/obs/default.nix
Normal file
12
programs/obs/default.nix
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
{pkgs, ...}: {
|
||||||
|
home.packages = with pkgs; [helvum];
|
||||||
|
programs.obs-studio = {
|
||||||
|
enable = true;
|
||||||
|
plugins = with pkgs.obs-studio-plugins; [
|
||||||
|
wlrobs
|
||||||
|
obs-vkcapture
|
||||||
|
obs-pipewire-audio-capture
|
||||||
|
input-overlay
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
25
programs/prog/default.nix
Normal file
25
programs/prog/default.nix
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
{pkgs, ...}: {
|
||||||
|
xdg.configFile = {
|
||||||
|
"ruff/pyproject.toml".source = ./ruff.toml;
|
||||||
|
"pypoetry/config.toml".source = ./pypoetry.toml;
|
||||||
|
};
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
# Nix
|
||||||
|
nil
|
||||||
|
alejandra
|
||||||
|
|
||||||
|
# Shell
|
||||||
|
shfmt
|
||||||
|
shellcheck
|
||||||
|
nodePackages.prettier
|
||||||
|
|
||||||
|
# Python
|
||||||
|
(python3.withPackages
|
||||||
|
(ps: with ps; [python-lsp-server flake8 mypy]))
|
||||||
|
black
|
||||||
|
isort
|
||||||
|
|
||||||
|
# FORTRAN
|
||||||
|
fortls
|
||||||
|
];
|
||||||
|
}
|
41
programs/prog/luarocks/graph-toolkit.nix
Normal file
41
programs/prog/luarocks/graph-toolkit.nix
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
{
|
||||||
|
agg,
|
||||||
|
freetype,
|
||||||
|
buildLuarocksPackage,
|
||||||
|
fetchgit,
|
||||||
|
fetchurl,
|
||||||
|
lua,
|
||||||
|
luaOlder,
|
||||||
|
}:
|
||||||
|
buildLuarocksPackage {
|
||||||
|
pname = "graph-toolkit";
|
||||||
|
version = "scm-1";
|
||||||
|
knownRockspec =
|
||||||
|
(fetchurl {
|
||||||
|
url = "mirror://luarocks/graph-toolkit-scm-1.rockspec";
|
||||||
|
sha256 = "0hsrf7k45w8ri18mdrx44mv1kr4zfr5mg76cxi8nnr30ssrblvgb";
|
||||||
|
})
|
||||||
|
.outPath;
|
||||||
|
src = fetchgit (removeAttrs (builtins.fromJSON '' {
|
||||||
|
"url": "https://github.com/franko/graph-toolkit",
|
||||||
|
"rev": "126a11bdbb98faf785c373516a288b7fa609f824",
|
||||||
|
"date": "2015-01-02T08:44:01-08:00",
|
||||||
|
"path": "/nix/store/gbwbjrl4j42kaqk3pjzvmckmr6dimkd0-graph-toolkit",
|
||||||
|
"sha256": "1pqjpqfandi7brk2213vlq891bl8drb0q32m5wmf0l21li0l4zrp",
|
||||||
|
"hash": "sha256-N39CQaRBUOAqL1UMDFZuiK6QEKZ7BCFmXic2qxy+Et8=",
|
||||||
|
"fetchLFS": false,
|
||||||
|
"fetchSubmodules": true,
|
||||||
|
"deepClone": false,
|
||||||
|
"leaveDotGit": false
|
||||||
|
}
|
||||||
|
'') ["date" "path" "sha256"]);
|
||||||
|
|
||||||
|
disabled = luaOlder "5.1";
|
||||||
|
propagatedBuildInputs = [lua agg freetype];
|
||||||
|
|
||||||
|
meta = {
|
||||||
|
homepage = "http://franko.github.io/graph-toolkit/";
|
||||||
|
description = "Lua Graphics Toolkit";
|
||||||
|
license.fullName = "GPL-3";
|
||||||
|
};
|
||||||
|
}
|
33
programs/prog/luarocks/scilua.nix
Normal file
33
programs/prog/luarocks/scilua.nix
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
{
|
||||||
|
buildLuarocksPackage,
|
||||||
|
fetchurl,
|
||||||
|
lua,
|
||||||
|
luaAtLeast,
|
||||||
|
luaOlder,
|
||||||
|
luaPackages,
|
||||||
|
}: let
|
||||||
|
xsys = luaPackages.callPackage ./xsys.nix {};
|
||||||
|
in
|
||||||
|
buildLuarocksPackage {
|
||||||
|
pname = "sci";
|
||||||
|
version = "1.0.0.beta12-1";
|
||||||
|
knownRockspec =
|
||||||
|
(fetchurl {
|
||||||
|
url = "mirror://luarocks/sci-1.0.0.beta12-1.rockspec";
|
||||||
|
sha256 = "0lprn9x4zw767hdz8lyxmwrrfyn5xj3x50pm9b4qiwy8992mg00r";
|
||||||
|
})
|
||||||
|
.outPath;
|
||||||
|
src = fetchurl {
|
||||||
|
url = "https://github.com/stepelu/lua-sci/archive/v1.0.0-beta12.tar.gz";
|
||||||
|
sha256 = "0a45r7n13gfqckpdp1bmizqvjadn8nc5d6ff9gjw860g3i75sy2h";
|
||||||
|
};
|
||||||
|
|
||||||
|
disabled = (luaOlder "5.1") || (luaAtLeast "5.4");
|
||||||
|
propagatedBuildInputs = [lua xsys];
|
||||||
|
|
||||||
|
meta = {
|
||||||
|
homepage = "https://github.com/stepelu/lua-sci";
|
||||||
|
description = "Scientific Computing with LuaJIT";
|
||||||
|
license.fullName = "MIT";
|
||||||
|
};
|
||||||
|
}
|
30
programs/prog/luarocks/xsys.nix
Normal file
30
programs/prog/luarocks/xsys.nix
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
{
|
||||||
|
buildLuarocksPackage,
|
||||||
|
fetchurl,
|
||||||
|
lua,
|
||||||
|
luaAtLeast,
|
||||||
|
luaOlder,
|
||||||
|
}:
|
||||||
|
buildLuarocksPackage {
|
||||||
|
pname = "xsys";
|
||||||
|
version = "1.0.2-1";
|
||||||
|
knownRockspec =
|
||||||
|
(fetchurl {
|
||||||
|
url = "mirror://luarocks/xsys-1.0.2-1.rockspec";
|
||||||
|
sha256 = "0jlyrwbzh6fi68msdynp4bbihyww4i3yk0qh859xlwqhfy5cza7p";
|
||||||
|
})
|
||||||
|
.outPath;
|
||||||
|
src = fetchurl {
|
||||||
|
url = "https://github.com/stepelu/lua-xsys/archive/v1.0.2.tar.gz";
|
||||||
|
sha256 = "1zwrlp6bghq8c12kyqc1ic7mrn8lf3d42755h8q2wxwhy1i3xqyh";
|
||||||
|
};
|
||||||
|
|
||||||
|
disabled = (luaOlder "5.1") || (luaAtLeast "5.4");
|
||||||
|
propagatedBuildInputs = [lua];
|
||||||
|
|
||||||
|
meta = {
|
||||||
|
homepage = "http://scilua.org/xsys.html";
|
||||||
|
description = "LuaJIT General Purpose Routines";
|
||||||
|
license.fullName = "MIT";
|
||||||
|
};
|
||||||
|
}
|
9
programs/prog/pypoetry.toml
Normal file
9
programs/prog/pypoetry.toml
Normal 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
|
37
programs/prog/ruff.toml
Normal file
37
programs/prog/ruff.toml
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
[lint]
|
||||||
|
select = [
|
||||||
|
"F", "E4", "E7", "E9", # Defaults
|
||||||
|
"W", # pycodestyle warnings
|
||||||
|
"B", # Flake8 bugbear rules
|
||||||
|
"PD", # Pandas vet rules
|
||||||
|
"NPY", # NumPy specific rules
|
||||||
|
"RUF", # Ruff specific rules
|
||||||
|
"PERF1", "PERF2", # Performance lints from Perflint
|
||||||
|
"E101", # Mixed spaces and tabs
|
||||||
|
"E501", # Line too long
|
||||||
|
"C901", # Complex structure
|
||||||
|
"I001", # Import block un-sorted / un-formatted
|
||||||
|
"I002", # Missing required import
|
||||||
|
"N804", # First argument of class method should be cls
|
||||||
|
"N805" # First argument of method should be self
|
||||||
|
]
|
||||||
|
ignore = [
|
||||||
|
"W191", # Ignore due to conflict with ruff formatter
|
||||||
|
"E111", # Ignore due to conflict with ruff formatter
|
||||||
|
"E114", # Ignore due to conflict with ruff formatter
|
||||||
|
"E117", # Ignore due to conflict with ruff formatter
|
||||||
|
"D206", # Ignore due to conflict with ruff formatter
|
||||||
|
"D300", # Ignore due to conflict with ruff formatter
|
||||||
|
"Q000", # Ignore due to conflict with ruff formatter
|
||||||
|
"Q001", # Ignore due to conflict with ruff formatter
|
||||||
|
"Q002", # Ignore due to conflict with ruff formatter
|
||||||
|
"Q003", # Ignore due to conflict with ruff formatter
|
||||||
|
"COM812", # Ignore due to conflict with ruff formatter
|
||||||
|
"COM819", # Ignore due to conflict with ruff formatter
|
||||||
|
"ISC001", # Ignore due to conflict with ruff formatter
|
||||||
|
"ISC002" # Ignore due to conflict with ruff formatter
|
||||||
|
]
|
||||||
|
unfixable = ["W", "B", "PD", "NPY", "RUF", "E101", "E501", "C901", "I001", "I002"]
|
||||||
|
|
||||||
|
# [format]
|
||||||
|
# docstring-code-format = true
|
140
programs/rofi/default.nix
Normal file
140
programs/rofi/default.nix
Normal file
|
@ -0,0 +1,140 @@
|
||||||
|
{
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
fonts,
|
||||||
|
accentColour ? "base07",
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
programs.rofi = {
|
||||||
|
enable = true;
|
||||||
|
package = pkgs.rofi-wayland;
|
||||||
|
font = fonts.monospace.name;
|
||||||
|
location = "center";
|
||||||
|
plugins = with pkgs; [rofi-emoji];
|
||||||
|
pass = {
|
||||||
|
enable = true;
|
||||||
|
extraConfig = ''
|
||||||
|
USERNAME_field='login'
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
extraConfig = {
|
||||||
|
modi = "run,drun,ssh,window,emoji,combi";
|
||||||
|
combi-modi = "drun,ssh,window,emoji";
|
||||||
|
sidebar-mode = true;
|
||||||
|
sort = true;
|
||||||
|
sorting-method = "fzf";
|
||||||
|
matching = "fuzzy";
|
||||||
|
icon-theme = config.gtk.iconTheme.name;
|
||||||
|
show-icons = true;
|
||||||
|
application-fallback-icon = "application-x-addon";
|
||||||
|
drun-display-format = "{icon} {name} ({categories})";
|
||||||
|
disable-history = false;
|
||||||
|
hide-scrollbar = true;
|
||||||
|
display-run = " Run ";
|
||||||
|
display-drun = " Apps ";
|
||||||
|
display-ssh = " SSH ";
|
||||||
|
display-window = " Move ";
|
||||||
|
display-emoji = " Emoji ";
|
||||||
|
display-combi = " Combi ";
|
||||||
|
};
|
||||||
|
theme = with builtins;
|
||||||
|
with config.scheme; let
|
||||||
|
inherit (config.lib.formats.rasi) mkLiteral;
|
||||||
|
bg = mkLiteral "rgba (${base00-rgb-r}, ${base00-rgb-g}, ${base00-rgb-b}, 80%)";
|
||||||
|
bg2 = mkLiteral "rgba (${base01-rgb-r}, ${base01-rgb-g}, ${base01-rgb-b}, 100%)";
|
||||||
|
fg = mkLiteral withHashtag.base05;
|
||||||
|
fg2 = mkLiteral withHashtag.base04;
|
||||||
|
border = mkLiteral withHashtag.${accentColour};
|
||||||
|
blue = mkLiteral withHashtag.blue;
|
||||||
|
in {
|
||||||
|
"*" = {
|
||||||
|
background-color = mkLiteral "transparent";
|
||||||
|
text-color = fg;
|
||||||
|
font = with fonts; "${monospace.name} ${toString sizes.popups}";
|
||||||
|
};
|
||||||
|
|
||||||
|
window = {
|
||||||
|
height = mkLiteral "75%";
|
||||||
|
width = mkLiteral "75%";
|
||||||
|
border = mkLiteral "1px";
|
||||||
|
border-color = border;
|
||||||
|
border-radius = mkLiteral "10px";
|
||||||
|
background-color = bg;
|
||||||
|
};
|
||||||
|
|
||||||
|
inputbar = {
|
||||||
|
children = map mkLiteral ["prompt" "entry"];
|
||||||
|
padding = mkLiteral "2px";
|
||||||
|
};
|
||||||
|
|
||||||
|
prompt = {
|
||||||
|
background-color = bg2;
|
||||||
|
padding = mkLiteral "6px";
|
||||||
|
text-color = blue;
|
||||||
|
border-radius = mkLiteral "10px";
|
||||||
|
margin = mkLiteral "20px 0px 0px 20px";
|
||||||
|
};
|
||||||
|
|
||||||
|
textbox-prompt-colon = {
|
||||||
|
expand = false;
|
||||||
|
str = "=";
|
||||||
|
};
|
||||||
|
|
||||||
|
entry = {
|
||||||
|
padding = mkLiteral "6px";
|
||||||
|
margin = mkLiteral "20px 0px 0px 10px";
|
||||||
|
};
|
||||||
|
|
||||||
|
listview = {
|
||||||
|
border = mkLiteral "0px 0px 0px";
|
||||||
|
padding = mkLiteral "6px 0px 0px";
|
||||||
|
margin = mkLiteral "10px 0px 0px 20px";
|
||||||
|
columns = 2;
|
||||||
|
lines = 5;
|
||||||
|
};
|
||||||
|
|
||||||
|
element = {
|
||||||
|
padding = mkLiteral "5px";
|
||||||
|
};
|
||||||
|
|
||||||
|
"element-icon" = {
|
||||||
|
size = mkLiteral "25px";
|
||||||
|
};
|
||||||
|
|
||||||
|
"element selected" = {
|
||||||
|
background-color = bg2;
|
||||||
|
text-color = blue;
|
||||||
|
border-radius = mkLiteral "10px";
|
||||||
|
};
|
||||||
|
|
||||||
|
mode-switcher = {
|
||||||
|
spacing = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
button = {
|
||||||
|
padding = mkLiteral "10px";
|
||||||
|
text-color = fg2;
|
||||||
|
border-radius = mkLiteral "10px";
|
||||||
|
vertical-align = mkLiteral "0.5";
|
||||||
|
horizontal-align = mkLiteral "0.5";
|
||||||
|
};
|
||||||
|
|
||||||
|
"button selected" = {
|
||||||
|
background-color = bg2;
|
||||||
|
text-color = blue;
|
||||||
|
};
|
||||||
|
|
||||||
|
message = {
|
||||||
|
margin = mkLiteral "2px";
|
||||||
|
padding = mkLiteral "2px";
|
||||||
|
border-radius = mkLiteral "5px";
|
||||||
|
};
|
||||||
|
|
||||||
|
textbox = {
|
||||||
|
padding = mkLiteral "6px";
|
||||||
|
margin = mkLiteral "20px 0px 0px 20px";
|
||||||
|
text-color = blue;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
40
programs/ssh/default.nix
Normal file
40
programs/ssh/default.nix
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
{...}: {
|
||||||
|
programs.ssh = {
|
||||||
|
enable = true;
|
||||||
|
forwardAgent = true;
|
||||||
|
compression = true;
|
||||||
|
serverAliveInterval = 15;
|
||||||
|
serverAliveCountMax = 3;
|
||||||
|
controlMaster = "auto";
|
||||||
|
controlPersist = "10s";
|
||||||
|
extraConfig = ''
|
||||||
|
AddKeysToAgent=yes
|
||||||
|
SetEnv TERM=xterm-256color
|
||||||
|
'';
|
||||||
|
matchBlocks = {
|
||||||
|
"git*".user = "git";
|
||||||
|
"legion" = {
|
||||||
|
user = "pixelifytica";
|
||||||
|
hostname = "192.168.0.31";
|
||||||
|
};
|
||||||
|
"vanguard" = {
|
||||||
|
user = "pixelifytica";
|
||||||
|
hostname = "192.168.0.90";
|
||||||
|
};
|
||||||
|
"ionos" = {
|
||||||
|
user = "root";
|
||||||
|
hostname = "77.68.67.133";
|
||||||
|
};
|
||||||
|
"freia" = {
|
||||||
|
user = "elitherl";
|
||||||
|
hostname = "freia020.hpc.l";
|
||||||
|
forwardX11Trusted = true;
|
||||||
|
};
|
||||||
|
"heimdall" = {
|
||||||
|
user = "elitherl";
|
||||||
|
hostname = "heimdall003.jet.uk";
|
||||||
|
forwardX11Trusted = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
75
programs/starship/default.nix
Normal file
75
programs/starship/default.nix
Normal file
|
@ -0,0 +1,75 @@
|
||||||
|
{...}: {
|
||||||
|
programs.starship = {
|
||||||
|
enable = true;
|
||||||
|
enableTransience = true;
|
||||||
|
settings = {
|
||||||
|
add_newline = false;
|
||||||
|
character = {
|
||||||
|
success_symbol = "[ ](bold green)";
|
||||||
|
error_symbol = "[ ](bold red)";
|
||||||
|
};
|
||||||
|
command_timeout = 2000;
|
||||||
|
container = {symbol = " ";};
|
||||||
|
directory = {
|
||||||
|
truncation_length = 2;
|
||||||
|
fish_style_pwd_dir_length = 1;
|
||||||
|
truncate_to_repo = false;
|
||||||
|
};
|
||||||
|
direnv = {disabled = false;};
|
||||||
|
git_branch = {
|
||||||
|
symbol = " ";
|
||||||
|
only_attached = true;
|
||||||
|
ignore_branches = ["master" "main"];
|
||||||
|
};
|
||||||
|
git_commit = {
|
||||||
|
format = "[ $hash | $tag]($style) ";
|
||||||
|
tag_symbol = " ";
|
||||||
|
tag_disabled = false;
|
||||||
|
};
|
||||||
|
git_metrics = {disabled = false;};
|
||||||
|
git_status = {
|
||||||
|
stashed = " ";
|
||||||
|
ahead = " ";
|
||||||
|
behind = " ";
|
||||||
|
up_to_date = "";
|
||||||
|
diverged = " ";
|
||||||
|
conflicted = " ";
|
||||||
|
deleted = " ";
|
||||||
|
renamed = " ";
|
||||||
|
modified = " ";
|
||||||
|
staged = " ";
|
||||||
|
untracked = " ";
|
||||||
|
typechanged = " ";
|
||||||
|
};
|
||||||
|
hostname = {
|
||||||
|
ssh_only = true;
|
||||||
|
ssh_symbol = " ";
|
||||||
|
};
|
||||||
|
jobs = {symbol = " ";};
|
||||||
|
line_break = {disabled = false;};
|
||||||
|
localip = {disabled = false;};
|
||||||
|
memory_usage = {disabled = false;};
|
||||||
|
os = {
|
||||||
|
disabled = false;
|
||||||
|
format = "on [$symbol]($style) ";
|
||||||
|
};
|
||||||
|
python = {python_binary = "python3";};
|
||||||
|
shell = {
|
||||||
|
disabled = false;
|
||||||
|
format = "using [$indicator ]($style)";
|
||||||
|
};
|
||||||
|
status = {
|
||||||
|
disabled = false;
|
||||||
|
map_symbol = true;
|
||||||
|
pipestatus = true;
|
||||||
|
symbol = " ";
|
||||||
|
success_symbol = "";
|
||||||
|
not_executable_symbol = " ";
|
||||||
|
not_found_symbol = " ";
|
||||||
|
sigint_symbol = " ";
|
||||||
|
signal_symbol = " ";
|
||||||
|
};
|
||||||
|
sudo = {disabled = false;};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
180
programs/sway/default.nix
Normal file
180
programs/sway/default.nix
Normal file
|
@ -0,0 +1,180 @@
|
||||||
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
fonts,
|
||||||
|
accentColour ? "base07",
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
imports = [../desktop.nix];
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
(writeShellScriptBin "protonmail-setup-bridge" ''
|
||||||
|
pkill -9 -f protonmail-bridge
|
||||||
|
${protonmail-bridge}/bin/protonmail-bridge -c
|
||||||
|
swaymsg exec "${protonmail-bridge}/bin/protonmail-bridge -n"
|
||||||
|
'')
|
||||||
|
(writeShellScriptBin "davmail-setup" ''
|
||||||
|
systemctl --user restart davmail # Ensure config file is present
|
||||||
|
systemctl --user stop davmail
|
||||||
|
${davmail}/bin/davmail -n ~/.davmail.properties
|
||||||
|
systemctl --user restart davmail
|
||||||
|
'')
|
||||||
|
];
|
||||||
|
wayland.windowManager.sway = {
|
||||||
|
enable = true;
|
||||||
|
package = null;
|
||||||
|
swaynag.enable = true;
|
||||||
|
systemd.enable = true;
|
||||||
|
xwayland = true;
|
||||||
|
config = {
|
||||||
|
input = {
|
||||||
|
"*" = {
|
||||||
|
xkb_layout = "gb";
|
||||||
|
xkb_options = "ctrl:nocaps";
|
||||||
|
};
|
||||||
|
"type:touchpad" = {
|
||||||
|
tap = "enabled";
|
||||||
|
natural_scroll = "enabled";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
seat = {
|
||||||
|
"seat0" = {
|
||||||
|
xcursor_theme = with config.gtk.cursorTheme; "${name} ${toString size}";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
modifier = "Mod4";
|
||||||
|
terminal = "${config.programs.alacritty.package}/bin/alacritty";
|
||||||
|
menu = "${config.programs.rofi.finalPackage}/bin/rofi -show drun";
|
||||||
|
workspaceAutoBackAndForth = true;
|
||||||
|
bars = [];
|
||||||
|
gaps = {
|
||||||
|
inner = 5;
|
||||||
|
outer = 0;
|
||||||
|
};
|
||||||
|
fonts = {
|
||||||
|
names = [fonts.monospace.name];
|
||||||
|
style = "regular";
|
||||||
|
size = fonts.sizes.desktop * 1.0;
|
||||||
|
};
|
||||||
|
colors = with config.scheme.withHashtag; let
|
||||||
|
text = toString base05;
|
||||||
|
indicator = toString cyan;
|
||||||
|
in rec {
|
||||||
|
background = toString base00;
|
||||||
|
focused = rec {
|
||||||
|
inherit background text indicator;
|
||||||
|
border = toString config.scheme.withHashtag.${accentColour};
|
||||||
|
childBorder = border;
|
||||||
|
};
|
||||||
|
focusedInactive = rec {
|
||||||
|
inherit background text indicator;
|
||||||
|
border = toString base04;
|
||||||
|
childBorder = border;
|
||||||
|
};
|
||||||
|
unfocused = rec {
|
||||||
|
inherit background text indicator;
|
||||||
|
border = toString base03;
|
||||||
|
childBorder = border;
|
||||||
|
};
|
||||||
|
urgent = rec {
|
||||||
|
inherit background text indicator;
|
||||||
|
border = toString red;
|
||||||
|
childBorder = border;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
startup = [
|
||||||
|
{command = "${pkgs.swaynotificationcenter}/bin/swaync";}
|
||||||
|
{command = "${pkgs.swaybg}/bin/swaybg -m fill -i ${../../wallpapers/waves/cat-waves.png}";}
|
||||||
|
{command = "${pkgs.libsForQt5.polkit-kde-agent}/libexec/polkit-kde-authentication-agent-1";}
|
||||||
|
{command = "${pkgs.protonmail-bridge}/bin/protonmail-bridge -n";}
|
||||||
|
];
|
||||||
|
window = {
|
||||||
|
border = 1;
|
||||||
|
commands = [
|
||||||
|
{
|
||||||
|
criteria = {app_id = "org.kde.polkit-kde-authentication-agent-1";};
|
||||||
|
command = "floating enable";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
criteria = {app_id = "Pinentry";};
|
||||||
|
command = "floating enable";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
criteria = {app_id = "pavucontrol";};
|
||||||
|
command = "floating enable";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
criteria = {app_id = ".blueman-manager-wrapped";};
|
||||||
|
command = "floating enable";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
criteria = {app_id = "nm-connection-editor";};
|
||||||
|
command = "floating enable";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
criteria = {class = "steam";};
|
||||||
|
command = "layout tabbed";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
floating.border = 1;
|
||||||
|
keybindings = with config; let
|
||||||
|
modifier = 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
|
||||||
|
## Sound
|
||||||
|
"XF86AudioMute" = "exec ${services.avizo.package}/bin/volumectl %";
|
||||||
|
"XF86AudioMicMute" = "exec ${services.avizo.package}/bin/volumectl -m %";
|
||||||
|
"XF86AudioRaiseVolume" = "exec ${services.avizo.package}/bin/volumectl -u + 5";
|
||||||
|
"XF86AudioLowerVolume" = "exec ${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 ${services.avizo.package}/bin/lightctl + 5";
|
||||||
|
"XF86MonBrightnessDown" = "exec ${services.avizo.package}/bin/lightctl - 5";
|
||||||
|
|
||||||
|
# System utilities
|
||||||
|
"${modifier}+F1" = "exec ${programs.swaylock.package}/bin/swaylock --screenshots --clock --indicator --grace-no-mouse";
|
||||||
|
"${modifier}+p" = "exec ${programs.wlogout.package}/bin/wlogout";
|
||||||
|
"${modifier}+z" = "exec ${pkgs.swaynotificationcenter}/bin/swaync-client -t -sw";
|
||||||
|
"${modifier}+Shift+z" = "exec ${pkgs.swaynotificationcenter}/bin/swaync-client -d -sw";
|
||||||
|
"${modifier}+Shift+Return" = "exec ${programs.emacs.finalPackage}/bin/emacsclient -c";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
extraConfig = ''
|
||||||
|
bindgesture swipe:right workspace prev
|
||||||
|
bindgesture swipe:left workspace next
|
||||||
|
corner_radius 10
|
||||||
|
blur enable
|
||||||
|
blur_xray disable
|
||||||
|
blur_passes 3
|
||||||
|
blur_radius 5
|
||||||
|
corner_radius 10
|
||||||
|
shadows enable
|
||||||
|
shadow_blur_radius 4
|
||||||
|
layer_effects "system-menu" blur enable; blur_ignore_transparent enable; shadows disable
|
||||||
|
layer_effects "gtk-layer-shell" blur enable; blur_ignore_transparent enable; shadows disable
|
||||||
|
layer_effects "waybar" blur enable; blur_ignore_transparent enable; shadows disable
|
||||||
|
layer_effects "rofi" blur enable; blur_ignore_transparent enable; shadows disable
|
||||||
|
layer_effects "avizo" blur enable; blur_ignore_transparent enable; shadows disable
|
||||||
|
layer_effects "swaync-notification-window" blur enable; blur_ignore_transparent enable; shadows disable
|
||||||
|
layer_effects "swaync-control-center" blur enable; blur_ignore_transparent enable; shadows disable
|
||||||
|
titlebar_separator enable
|
||||||
|
scratchpad_minimize enable
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
}
|
18
programs/swaylock/default.nix
Normal file
18
programs/swaylock/default.nix
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
{pkgs, ...}: {
|
||||||
|
programs.swaylock = {
|
||||||
|
enable = true;
|
||||||
|
package = pkgs.swaylock-effects;
|
||||||
|
# Settings are specifically for swaylock-effects
|
||||||
|
settings = {
|
||||||
|
indicator-radius = 100;
|
||||||
|
indicator-thickness = 10;
|
||||||
|
indicator-caps-lock = true;
|
||||||
|
ignore-empty-password = true;
|
||||||
|
show-failed-attempts = true;
|
||||||
|
effect-blur = "5x3";
|
||||||
|
effect-vignette = "0.5:0.5";
|
||||||
|
grace = 2;
|
||||||
|
fade-in = 0.2;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
355
programs/swaync/default.nix
Normal file
355
programs/swaync/default.nix
Normal file
|
@ -0,0 +1,355 @@
|
||||||
|
{
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
fonts,
|
||||||
|
accentColour ? "base07",
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
home.packages = [pkgs.swaynotificationcenter];
|
||||||
|
xdg.configFile."swaync/style.css".text = with config.scheme; ''
|
||||||
|
* {
|
||||||
|
all: unset;
|
||||||
|
font-size: 1.2rem;
|
||||||
|
font-family: "${fonts.monospace.name}";
|
||||||
|
transition: 200ms;
|
||||||
|
}
|
||||||
|
|
||||||
|
.floating-notifications.background .notification-row .notification-background {
|
||||||
|
border-radius: 10px;
|
||||||
|
border: 1px solid ${withHashtag.${accentColour}};
|
||||||
|
margin: 18px;
|
||||||
|
background-color: rgba(${base00-rgb-r}, ${base00-rgb-g}, ${base00-rgb-b}, 0.8);
|
||||||
|
color: ${withHashtag.base05};
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.floating-notifications.background
|
||||||
|
.notification-row
|
||||||
|
.notification-background
|
||||||
|
.notification {
|
||||||
|
padding: 7px;
|
||||||
|
border-radius: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.floating-notifications.background
|
||||||
|
.notification-row
|
||||||
|
.notification-background
|
||||||
|
.notification
|
||||||
|
.notification-content {
|
||||||
|
margin: 7px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.floating-notifications.background
|
||||||
|
.notification-row
|
||||||
|
.notification-background
|
||||||
|
.notification
|
||||||
|
.notification-content
|
||||||
|
.summary {
|
||||||
|
color: ${withHashtag.base05};
|
||||||
|
}
|
||||||
|
|
||||||
|
.floating-notifications.background
|
||||||
|
.notification-row
|
||||||
|
.notification-background
|
||||||
|
.notification
|
||||||
|
.notification-content
|
||||||
|
.time {
|
||||||
|
color: ${withHashtag.base04};
|
||||||
|
}
|
||||||
|
|
||||||
|
.floating-notifications.background
|
||||||
|
.notification-row
|
||||||
|
.notification-background
|
||||||
|
.notification
|
||||||
|
.notification-content
|
||||||
|
.body {
|
||||||
|
color: ${withHashtag.base05};
|
||||||
|
}
|
||||||
|
|
||||||
|
.floating-notifications.background
|
||||||
|
.notification-row
|
||||||
|
.notification-background
|
||||||
|
.notification
|
||||||
|
> *:last-child
|
||||||
|
> * {
|
||||||
|
min-height: 3.4em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.floating-notifications.background
|
||||||
|
.notification-row
|
||||||
|
.notification-background
|
||||||
|
.notification
|
||||||
|
> *:last-child
|
||||||
|
> *
|
||||||
|
.notification-action {
|
||||||
|
border-radius: 10px;
|
||||||
|
background-color: ${withHashtag.base01};
|
||||||
|
color: ${withHashtag.base05};
|
||||||
|
margin: 7px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.floating-notifications.background
|
||||||
|
.notification-row
|
||||||
|
.notification-background
|
||||||
|
.notification
|
||||||
|
> *:last-child
|
||||||
|
> *
|
||||||
|
.notification-action:hover {
|
||||||
|
background-color: ${withHashtag.base01};
|
||||||
|
color: ${withHashtag.base05};
|
||||||
|
}
|
||||||
|
|
||||||
|
.floating-notifications.background
|
||||||
|
.notification-row
|
||||||
|
.notification-background
|
||||||
|
.notification
|
||||||
|
> *:last-child
|
||||||
|
> *
|
||||||
|
.notification-action:active {
|
||||||
|
background-color: ${withHashtag.blue};
|
||||||
|
color: ${withHashtag.base00};
|
||||||
|
}
|
||||||
|
|
||||||
|
.floating-notifications.background
|
||||||
|
.notification-row
|
||||||
|
.notification-background
|
||||||
|
.close-button {
|
||||||
|
margin: 7px;
|
||||||
|
padding: 2px;
|
||||||
|
border-radius: 10px;
|
||||||
|
background-color: ${withHashtag.red};
|
||||||
|
color: ${withHashtag.base00};
|
||||||
|
}
|
||||||
|
|
||||||
|
.floating-notifications.background
|
||||||
|
.notification-row
|
||||||
|
.notification-background
|
||||||
|
.close-button:hover {
|
||||||
|
background-color: ${withHashtag.red};
|
||||||
|
color: ${withHashtag.base00};
|
||||||
|
}
|
||||||
|
|
||||||
|
.floating-notifications.background
|
||||||
|
.notification-row
|
||||||
|
.notification-background
|
||||||
|
.close-button:active {
|
||||||
|
background-color: ${withHashtag.red};
|
||||||
|
color: ${withHashtag.base00};
|
||||||
|
}
|
||||||
|
|
||||||
|
.control-center {
|
||||||
|
border-radius: 10px;
|
||||||
|
border: 1px solid ${withHashtag.${accentColour}};
|
||||||
|
margin: 18px;
|
||||||
|
background-color: rgba(${base00-rgb-r}, ${base00-rgb-g}, ${base00-rgb-b}, 0.8);
|
||||||
|
color: ${withHashtag.base05};
|
||||||
|
padding: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.control-center .widget-title {
|
||||||
|
color: ${withHashtag.base05};
|
||||||
|
font-size: 1.3em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.control-center .widget-title button {
|
||||||
|
border-radius: 7px;
|
||||||
|
background-color: ${withHashtag.base01};
|
||||||
|
color: ${withHashtag.base05};
|
||||||
|
padding: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.control-center .widget-title button:hover {
|
||||||
|
background-color: ${withHashtag.base02};
|
||||||
|
color: ${withHashtag.base05};
|
||||||
|
}
|
||||||
|
|
||||||
|
.control-center .widget-title button:active {
|
||||||
|
background-color: ${withHashtag.base03};
|
||||||
|
color: ${withHashtag.base05};
|
||||||
|
}
|
||||||
|
|
||||||
|
.control-center .notification-row .notification-background {
|
||||||
|
border-radius: 10px;
|
||||||
|
background-color: ${withHashtag.base01};
|
||||||
|
color: ${withHashtag.base05};
|
||||||
|
margin-top: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.control-center .notification-row .notification-background .notification {
|
||||||
|
padding: 7px;
|
||||||
|
border-radius: 7px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.control-center
|
||||||
|
.notification-row
|
||||||
|
.notification-background
|
||||||
|
.notification
|
||||||
|
.notification-content {
|
||||||
|
margin: 7px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.control-center
|
||||||
|
.notification-row
|
||||||
|
.notification-background
|
||||||
|
.notification
|
||||||
|
.notification-content
|
||||||
|
.summary {
|
||||||
|
color: ${withHashtag.base05};
|
||||||
|
}
|
||||||
|
|
||||||
|
.control-center
|
||||||
|
.notification-row
|
||||||
|
.notification-background
|
||||||
|
.notification
|
||||||
|
.notification-content
|
||||||
|
.time {
|
||||||
|
color: ${withHashtag.base04};
|
||||||
|
}
|
||||||
|
|
||||||
|
.control-center
|
||||||
|
.notification-row
|
||||||
|
.notification-background
|
||||||
|
.notification
|
||||||
|
.notification-content
|
||||||
|
.body {
|
||||||
|
color: ${withHashtag.base05};
|
||||||
|
}
|
||||||
|
|
||||||
|
.control-center
|
||||||
|
.notification-row
|
||||||
|
.notification-background
|
||||||
|
.notification
|
||||||
|
> *:last-child
|
||||||
|
> * {
|
||||||
|
min-height: 3.4em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.control-center
|
||||||
|
.notification-row
|
||||||
|
.notification-background
|
||||||
|
.notification
|
||||||
|
> *:last-child
|
||||||
|
> *
|
||||||
|
.notification-action {
|
||||||
|
border-radius: 7px;
|
||||||
|
background-color: ${withHashtag.base00};
|
||||||
|
color: ${withHashtag.base05};
|
||||||
|
margin: 7px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.control-center
|
||||||
|
.notification-row
|
||||||
|
.notification-background
|
||||||
|
.notification
|
||||||
|
> *:last-child
|
||||||
|
> *
|
||||||
|
.notification-action:hover {
|
||||||
|
background-color: ${withHashtag.base01};;
|
||||||
|
color: ${withHashtag.base05};
|
||||||
|
}
|
||||||
|
|
||||||
|
.control-center
|
||||||
|
.notification-row
|
||||||
|
.notification-background
|
||||||
|
.notification
|
||||||
|
> *:last-child
|
||||||
|
> *
|
||||||
|
.notification-action:active {
|
||||||
|
background-color: ${withHashtag.blue};
|
||||||
|
color: ${withHashtag.base05};
|
||||||
|
}
|
||||||
|
|
||||||
|
.control-center .notification-row .notification-background .close-button {
|
||||||
|
margin: 7px;
|
||||||
|
padding: 2px;
|
||||||
|
border-radius: 6.3px;
|
||||||
|
background-color: ${withHashtag.red};
|
||||||
|
color: ${withHashtag.base00};
|
||||||
|
}
|
||||||
|
|
||||||
|
.control-center .notification-row .notification-background .close-button:hover {
|
||||||
|
background-color: ${withHashtag.red};
|
||||||
|
color: ${withHashtag.base00};
|
||||||
|
}
|
||||||
|
|
||||||
|
.control-center
|
||||||
|
.notification-row
|
||||||
|
.notification-background
|
||||||
|
.close-button:active {
|
||||||
|
background-color: ${withHashtag.red};
|
||||||
|
color: ${withHashtag.base00};
|
||||||
|
}
|
||||||
|
|
||||||
|
.control-center .notification-row .notification-background:hover {
|
||||||
|
background-color: ${withHashtag.base00};
|
||||||
|
color: ${withHashtag.base05};
|
||||||
|
}
|
||||||
|
|
||||||
|
.control-center .notification-row .notification-background:active {
|
||||||
|
background-color: ${withHashtag.blue};
|
||||||
|
color: ${withHashtag.base05};
|
||||||
|
}
|
||||||
|
|
||||||
|
progressbar,
|
||||||
|
progress,
|
||||||
|
trough {
|
||||||
|
border-radius: 12.6px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.notification.critical progress {
|
||||||
|
background-color: ${withHashtag.red};
|
||||||
|
}
|
||||||
|
|
||||||
|
.notification.low progress,
|
||||||
|
.notification.normal progress {
|
||||||
|
background-color: ${withHashtag.blue};
|
||||||
|
}
|
||||||
|
|
||||||
|
trough {
|
||||||
|
background-color: ${withHashtag.base00};
|
||||||
|
}
|
||||||
|
|
||||||
|
.control-center trough {
|
||||||
|
background-color: ${withHashtag.base03};
|
||||||
|
}
|
||||||
|
|
||||||
|
.control-center-dnd {
|
||||||
|
margin-top: 5px;
|
||||||
|
border-radius: 8px;
|
||||||
|
background: ${withHashtag.base00};
|
||||||
|
border: 1px solid ${withHashtag.base03};
|
||||||
|
}
|
||||||
|
|
||||||
|
.control-center-dnd:checked {
|
||||||
|
background: ${withHashtag.base00};
|
||||||
|
}
|
||||||
|
|
||||||
|
.control-center-dnd slider {
|
||||||
|
background: ${withHashtag.base03};
|
||||||
|
border-radius: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.widget-dnd {
|
||||||
|
margin: 0px;
|
||||||
|
font-size: 1.1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.widget-dnd > switch {
|
||||||
|
font-size: initial;
|
||||||
|
border-radius: 8px;
|
||||||
|
background: ${withHashtag.base00};
|
||||||
|
border: 1px solid ${withHashtag.base03};
|
||||||
|
}
|
||||||
|
|
||||||
|
.widget-dnd > switch:checked {
|
||||||
|
background: ${withHashtag.base00};
|
||||||
|
}
|
||||||
|
|
||||||
|
.widget-dnd > switch slider {
|
||||||
|
background: ${withHashtag.base01};
|
||||||
|
border-radius: 8px;
|
||||||
|
border: 1px solid ${withHashtag.${accentColour}};
|
||||||
|
}
|
||||||
|
|
||||||
|
'';
|
||||||
|
}
|
353
programs/waybar/default.nix
Normal file
353
programs/waybar/default.nix
Normal file
|
@ -0,0 +1,353 @@
|
||||||
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
hostName,
|
||||||
|
fonts,
|
||||||
|
accentColour ? "base07",
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
systemd.user.targets.tray.Unit = {
|
||||||
|
Description = "Home Manager System Tray";
|
||||||
|
Requires = ["graphical-session-pre.target"];
|
||||||
|
};
|
||||||
|
programs.waybar = {
|
||||||
|
enable = true;
|
||||||
|
systemd = {
|
||||||
|
enable = true;
|
||||||
|
target = "sway-session.target";
|
||||||
|
};
|
||||||
|
settings = rec {
|
||||||
|
main = {
|
||||||
|
name = "main";
|
||||||
|
layer = "top";
|
||||||
|
position = "top";
|
||||||
|
# Layout
|
||||||
|
"modules-left" = ["mpris"];
|
||||||
|
"modules-center" = ["sway/workspaces"];
|
||||||
|
"modules-right" = [
|
||||||
|
"custom/notification"
|
||||||
|
"pulseaudio"
|
||||||
|
"network"
|
||||||
|
"bluetooth"
|
||||||
|
"clock#calendar"
|
||||||
|
"clock"
|
||||||
|
"backlight"
|
||||||
|
"battery"
|
||||||
|
"custom/weather"
|
||||||
|
"tray"
|
||||||
|
];
|
||||||
|
# Module config
|
||||||
|
"sway/workspaces" = {
|
||||||
|
format = "{icon}";
|
||||||
|
format-icons = {
|
||||||
|
"1" = " ";
|
||||||
|
"2" = " ";
|
||||||
|
"3" = " ";
|
||||||
|
"4" = " ";
|
||||||
|
"5" = " ";
|
||||||
|
"6" = " ";
|
||||||
|
default = " ";
|
||||||
|
urgent = " ";
|
||||||
|
};
|
||||||
|
# show-special = false;
|
||||||
|
# sort-by-number = true;
|
||||||
|
all-outputs = false;
|
||||||
|
persistent-workspaces = {
|
||||||
|
"1" = [];
|
||||||
|
"2" = [];
|
||||||
|
"3" = [];
|
||||||
|
"4" = [];
|
||||||
|
"5" = [];
|
||||||
|
"6" = [];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
"sway/window" = {
|
||||||
|
"format" = "{title}";
|
||||||
|
"max-length" = 50;
|
||||||
|
"rewrite" = {
|
||||||
|
"(.*) - GNU Emacs at (.*)" = " $1 [$2]";
|
||||||
|
"(Alacritty.*)" = " $1";
|
||||||
|
"(.*) - mpv" = " $1";
|
||||||
|
"swayimg: (.*)" = " $1";
|
||||||
|
"(btm)" = " Resource Usage [$1]";
|
||||||
|
"(cava)" = " Music Visualiser [$1]";
|
||||||
|
"(.*) - Thunar" = " $1";
|
||||||
|
"Mozilla Firefox" = " $1";
|
||||||
|
"(.*) — Mozilla Firefox" = " $1";
|
||||||
|
"Nyxt - (.*)" = " $1";
|
||||||
|
"(.*) - Chromium" = " $1";
|
||||||
|
"((?:.*)WebCord.*)" = " $1";
|
||||||
|
"(Signal.*)" = " $1";
|
||||||
|
"([Ss]team)" = " $1";
|
||||||
|
"(Prism Launcher.*)" = " Minecraft ($1)";
|
||||||
|
"(X2Go Client)" = " $1";
|
||||||
|
"(NoMachine|Nxplayer.bin) (.*)" = " $1 $2";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
mpris = {
|
||||||
|
"format" = "{status_icon} {player_icon} {artist} - {title}";
|
||||||
|
"tooltip-format" = "{player_icon} ({player}) {dynamic}";
|
||||||
|
"title-len" = 64;
|
||||||
|
"interval" = 1;
|
||||||
|
"dynamic-order" = [
|
||||||
|
"album"
|
||||||
|
"artist"
|
||||||
|
"title"
|
||||||
|
"position"
|
||||||
|
"length"
|
||||||
|
];
|
||||||
|
"player-icons" = {
|
||||||
|
"default" = " ";
|
||||||
|
"emms" = " ";
|
||||||
|
"firefox" = " ";
|
||||||
|
"mpv" = " ";
|
||||||
|
};
|
||||||
|
"status-icons" = {
|
||||||
|
"playing" = "";
|
||||||
|
"paused" = "";
|
||||||
|
"stopped" = "";
|
||||||
|
};
|
||||||
|
"ignored-players" = [];
|
||||||
|
};
|
||||||
|
pulseaudio = {
|
||||||
|
scroll-step = 5;
|
||||||
|
format = "{format_source}{icon}{volume}%";
|
||||||
|
format-muted = "{format_source} ";
|
||||||
|
format-source = " ";
|
||||||
|
format-source-muted = " ";
|
||||||
|
format-icons = {
|
||||||
|
car = " ";
|
||||||
|
default = [" " " " " "];
|
||||||
|
hands-free = " ";
|
||||||
|
headset = " ";
|
||||||
|
phone = " ";
|
||||||
|
portable = " ";
|
||||||
|
headphone = " ";
|
||||||
|
};
|
||||||
|
on-click = "${pkgs.pavucontrol}/bin/pavucontrol";
|
||||||
|
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 = " ";
|
||||||
|
tooltip-format = "{essid} ({signalStrength}%)";
|
||||||
|
format-linked = " ";
|
||||||
|
format-disconnected = " ";
|
||||||
|
};
|
||||||
|
bluetooth = {
|
||||||
|
format = "";
|
||||||
|
format-disabled = "";
|
||||||
|
format-off = "";
|
||||||
|
format-on = "";
|
||||||
|
format-connected = "";
|
||||||
|
tooltip-format = "{status} | {device_alias}";
|
||||||
|
on-click = "${pkgs.bluez}/bin/bluetoothctl power on";
|
||||||
|
on-click-right = "${pkgs.bluez}/bin/bluetoothctl power off";
|
||||||
|
};
|
||||||
|
"clock#calendar" = {
|
||||||
|
# format = "{: %Y-%m-%d}";
|
||||||
|
format = "{:%Y-%m-%d}"; # TEMP, see https://github.com/Alexays/Waybar/issues/3021
|
||||||
|
tooltip-format = "<tt><small>{calendar}</small></tt>";
|
||||||
|
calendar = {
|
||||||
|
mode = "month";
|
||||||
|
mode-mon-col = 3;
|
||||||
|
weeks-pos = "left";
|
||||||
|
on-scroll = 1;
|
||||||
|
on-click-right = "mode";
|
||||||
|
format = {
|
||||||
|
months = "<span color='#ffead3'><b>{}</b></span>";
|
||||||
|
days = "<span color='#ecc6d9'><b>{}</b></span>";
|
||||||
|
weeks = "<span color='#99ffdd'><b>W{}</b></span>";
|
||||||
|
weekdays = "<span color='#ffcc66'><b>{}</b></span>";
|
||||||
|
today = "<span color='#ff6699'><b><u>{}</u></b></span>";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
actions = {
|
||||||
|
on-click-right = "mode";
|
||||||
|
on-scroll-up = "shift_up";
|
||||||
|
on-scroll-down = "shift_down";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
clock = {
|
||||||
|
# format = "{: %R}";
|
||||||
|
format = "{:%R}"; # TEMP, see https://github.com/Alexays/Waybar/issues/3021
|
||||||
|
};
|
||||||
|
backlight = {
|
||||||
|
format = "{icon}";
|
||||||
|
tooltip-format = "{percent}%";
|
||||||
|
format-icons = [" " " " " " " " " " " " " " " " " "];
|
||||||
|
};
|
||||||
|
battery = {
|
||||||
|
states = {
|
||||||
|
warning = 30;
|
||||||
|
critical = 20;
|
||||||
|
};
|
||||||
|
format = "{icon}";
|
||||||
|
format-charging = " ";
|
||||||
|
format-plugged = " ";
|
||||||
|
tooltip-format = "{capacity}% {time}";
|
||||||
|
format-icons = [" " " " " " " " " " " " " " " " " " " " " "];
|
||||||
|
};
|
||||||
|
"custom/notification" = let
|
||||||
|
swaync = pkgs.swaynotificationcenter;
|
||||||
|
in {
|
||||||
|
"tooltip" = false;
|
||||||
|
"format" = "{icon}{}";
|
||||||
|
"format-icons" = {
|
||||||
|
"notification" = " ";
|
||||||
|
"none" = " ";
|
||||||
|
"dnd-notification" = " ";
|
||||||
|
"dnd-none" = " ";
|
||||||
|
"inhibited-notification" = " ";
|
||||||
|
"inhibited-none" = " ";
|
||||||
|
"dnd-inhibited-notification" = " ";
|
||||||
|
"dnd-inhibited-none" = " ";
|
||||||
|
};
|
||||||
|
"return-type" = "json";
|
||||||
|
"exec-if" = "which ${swaync}/bin/swaync-client";
|
||||||
|
"exec" = "${swaync}/bin/swaync-client -swb";
|
||||||
|
"on-click" = "${swaync}/bin/swaync-client -t -sw";
|
||||||
|
"on-click-right" = "${swaync}/bin/swaync-client -d -sw";
|
||||||
|
"escape" = true;
|
||||||
|
};
|
||||||
|
"custom/weather" = let
|
||||||
|
date-format = "%Y-%m-%d";
|
||||||
|
custom-indicator = "{ICON}{temp_C}({FeelsLikeC})";
|
||||||
|
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 = builtins.floor fonts.sizes.popups;
|
||||||
|
show-passive-items = true;
|
||||||
|
spacing = 5;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
# TEMP FIX
|
||||||
|
alt = lib.mkIf (hostName == "Vanguard") {
|
||||||
|
inherit (main) layer position "sway/workspaces";
|
||||||
|
name = "alt";
|
||||||
|
"modules-left" = [];
|
||||||
|
"modules-center" = ["sway/workspaces"];
|
||||||
|
"modules-right" = [];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
style = with config.scheme.withHashtag; let
|
||||||
|
accent = config.scheme.withHashtag.${accentColour};
|
||||||
|
in ''
|
||||||
|
* {
|
||||||
|
all: unset;
|
||||||
|
font-size: 1em;
|
||||||
|
font-family: ${fonts.monospace.name};
|
||||||
|
}
|
||||||
|
|
||||||
|
window {
|
||||||
|
background: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
window > box {
|
||||||
|
color: ${base05};
|
||||||
|
background: alpha(${base00}, 0.8);
|
||||||
|
margin: 5px 5px 0px;
|
||||||
|
padding: 0px;
|
||||||
|
border: 1px solid ${accent};
|
||||||
|
border-radius: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
tooltip {
|
||||||
|
background: alpha(${base00}, 0.8);
|
||||||
|
border: 1px solid ${accent};
|
||||||
|
border-radius: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
tooltip label {
|
||||||
|
color: ${base05};
|
||||||
|
border: none;
|
||||||
|
padding: 5px;
|
||||||
|
margin: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#workspaces,
|
||||||
|
#window,
|
||||||
|
#mpris,
|
||||||
|
#pulseaudio,
|
||||||
|
#network,
|
||||||
|
#bluetooth,
|
||||||
|
#backlight,
|
||||||
|
#battery,
|
||||||
|
#clock,
|
||||||
|
#custom-notification,
|
||||||
|
#custom-weather,
|
||||||
|
#tray {
|
||||||
|
margin: 0px;
|
||||||
|
padding: 1px 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#workspaces,
|
||||||
|
#window,
|
||||||
|
#mpris,
|
||||||
|
#tray,
|
||||||
|
#backlight,
|
||||||
|
#battery,
|
||||||
|
#custom-weather {
|
||||||
|
color: ${base05};
|
||||||
|
}
|
||||||
|
|
||||||
|
#workspaces button {
|
||||||
|
background: transparent;
|
||||||
|
color: ${base05};
|
||||||
|
margin: 0px;
|
||||||
|
padding: 0px 5px;
|
||||||
|
}
|
||||||
|
#workspaces button.persistent {
|
||||||
|
color: ${base03};
|
||||||
|
}
|
||||||
|
#workspaces button.focused {
|
||||||
|
color: ${accent};
|
||||||
|
}
|
||||||
|
#workspaces button.urgent {
|
||||||
|
color: ${base09};
|
||||||
|
}
|
||||||
|
|
||||||
|
#custom-notification {
|
||||||
|
color: ${base08};
|
||||||
|
}
|
||||||
|
#pulseaudio {
|
||||||
|
color: ${base09};
|
||||||
|
}
|
||||||
|
#network {
|
||||||
|
color: ${base0A};
|
||||||
|
}
|
||||||
|
#bluetooth {
|
||||||
|
color: ${base0B};
|
||||||
|
}
|
||||||
|
#clock.calendar {
|
||||||
|
color: ${base0C};
|
||||||
|
}
|
||||||
|
#clock {
|
||||||
|
color: ${base0D};
|
||||||
|
}
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
}
|
79
programs/wlogout/default.nix
Normal file
79
programs/wlogout/default.nix
Normal file
|
@ -0,0 +1,79 @@
|
||||||
|
{
|
||||||
|
config,
|
||||||
|
fonts,
|
||||||
|
accentColour ? "base07",
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
programs.wlogout = {
|
||||||
|
enable = true;
|
||||||
|
layout = [
|
||||||
|
{
|
||||||
|
label = "reboot";
|
||||||
|
action = "systemctl reboot";
|
||||||
|
text = "Reboot";
|
||||||
|
keybind = "r";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
label = "shutdown";
|
||||||
|
action = "systemctl poweroff";
|
||||||
|
text = "Shutdown";
|
||||||
|
keybind = "s";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
label = "logout";
|
||||||
|
action = "swaymsg exit";
|
||||||
|
text = "Logout";
|
||||||
|
keybind = "l";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
style = with config.scheme.withHashtag; let
|
||||||
|
accent = config.scheme.withHashtag.${accentColour};
|
||||||
|
shutdownIcon = ./icons/shutdown.png;
|
||||||
|
rebootIcon = ./icons/reboot.png;
|
||||||
|
logoutIcon = ./icons/logout.png;
|
||||||
|
in ''
|
||||||
|
* {
|
||||||
|
font-size: ${toString fonts.sizes.popups}px;
|
||||||
|
font-family: "${fonts.sansSerif.name}";
|
||||||
|
}
|
||||||
|
|
||||||
|
window {
|
||||||
|
border: none;
|
||||||
|
background-color: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
button {
|
||||||
|
border: ${accent};
|
||||||
|
background-color: ${base00};
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-position: center;
|
||||||
|
background-size: 25%;
|
||||||
|
box-shadow: none;
|
||||||
|
margin: 5px;
|
||||||
|
color: ${base05};
|
||||||
|
}
|
||||||
|
|
||||||
|
button:hover {
|
||||||
|
background-color: ${base01};
|
||||||
|
color: ${base05};
|
||||||
|
}
|
||||||
|
|
||||||
|
button:focus {
|
||||||
|
background-color: ${base03};
|
||||||
|
color: ${base05};
|
||||||
|
}
|
||||||
|
|
||||||
|
#shutdown {
|
||||||
|
background-image: url("${shutdownIcon}");
|
||||||
|
}
|
||||||
|
|
||||||
|
#reboot {
|
||||||
|
background-image: url("${rebootIcon}");
|
||||||
|
}
|
||||||
|
|
||||||
|
#logout {
|
||||||
|
background-image: url("${logoutIcon}");
|
||||||
|
}
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
}
|
BIN
programs/wlogout/icons/hibernate.png
Normal file
BIN
programs/wlogout/icons/hibernate.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 18 KiB |
BIN
programs/wlogout/icons/lock.png
Normal file
BIN
programs/wlogout/icons/lock.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 7.9 KiB |
BIN
programs/wlogout/icons/logout.png
Normal file
BIN
programs/wlogout/icons/logout.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 6.2 KiB |
BIN
programs/wlogout/icons/reboot.png
Normal file
BIN
programs/wlogout/icons/reboot.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 16 KiB |
BIN
programs/wlogout/icons/shutdown.png
Normal file
BIN
programs/wlogout/icons/shutdown.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 15 KiB |
BIN
programs/wlogout/icons/suspend.png
Normal file
BIN
programs/wlogout/icons/suspend.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 17 KiB |
38
programs/zsh/default.nix
Normal file
38
programs/zsh/default.nix
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
{...}: {
|
||||||
|
programs.zsh = {
|
||||||
|
enable = true;
|
||||||
|
enableCompletion = true;
|
||||||
|
enableAutosuggestions = true;
|
||||||
|
syntaxHighlighting.enable = true;
|
||||||
|
enableVteIntegration = true;
|
||||||
|
autocd = true;
|
||||||
|
historySubstringSearch.enable = true;
|
||||||
|
history = {
|
||||||
|
extended = true;
|
||||||
|
ignoreDups = true;
|
||||||
|
ignoreSpace = true;
|
||||||
|
};
|
||||||
|
shellAliases = {
|
||||||
|
nixos-repl = "nixos-rebuild repl";
|
||||||
|
nixos-test = "sudo nixos-rebuild test";
|
||||||
|
nixos-boot = "sudo nixos-rebuild boot";
|
||||||
|
nixos-switch = "sudo nixos-rebuild switch";
|
||||||
|
nixos-reboot = "sudo nixos-rebuild boot && sudo reboot now";
|
||||||
|
nixos-shutdown = "sudo nixos-rebuild boot && sudo shutdown now";
|
||||||
|
gsa = "git-sync-all";
|
||||||
|
};
|
||||||
|
oh-my-zsh = {
|
||||||
|
enable = true;
|
||||||
|
plugins = ["colored-man-pages" "lol" "rand-quote"];
|
||||||
|
theme = "";
|
||||||
|
};
|
||||||
|
completionInit = ''
|
||||||
|
autoload -Uz +X compinit && compinit
|
||||||
|
|
||||||
|
## case insensitive path-completion
|
||||||
|
zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z}'
|
||||||
|
zstyle ':completion:*' menu select
|
||||||
|
'';
|
||||||
|
initExtra = "source ${./transient.zsh}\n";
|
||||||
|
};
|
||||||
|
}
|
31
programs/zsh/transient.zsh
Executable file
31
programs/zsh/transient.zsh
Executable file
|
@ -0,0 +1,31 @@
|
||||||
|
#!/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
|
10
scripts/default.nix
Normal file
10
scripts/default.nix
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
{pkgs, ...}: {
|
||||||
|
home.packages = [
|
||||||
|
(pkgs.writeShellScriptBin "git-sync-all"
|
||||||
|
(builtins.readFile ./git-sync-all.sh))
|
||||||
|
(pkgs.writeShellScriptBin "rsync-local-config"
|
||||||
|
(builtins.readFile ./rsync-local-config.sh))
|
||||||
|
(pkgs.writeShellScriptBin "xdg-query-program"
|
||||||
|
(builtins.readFile ./xdg-query-program.sh))
|
||||||
|
];
|
||||||
|
}
|
55
scripts/git-sync-all.sh
Executable file
55
scripts/git-sync-all.sh
Executable file
|
@ -0,0 +1,55 @@
|
||||||
|
# Sync common directories, setting url to ensure it's up-to-date first
|
||||||
|
SYNC_DIRS=(
|
||||||
|
"$HOME/.password-store/"
|
||||||
|
"$HOME/.elfeed/"
|
||||||
|
"$HOME/Documents/Org/"
|
||||||
|
"$HOME/Documents/References/"
|
||||||
|
)
|
||||||
|
SYNC_URLS=(
|
||||||
|
"https://git.xenia.me.uk/pixelifytica/pass.git"
|
||||||
|
"https://git.xenia.me.uk/pixelifytica/elfeed.git"
|
||||||
|
"https://git.xenia.me.uk/pixelifytica/org.git"
|
||||||
|
"https://git.xenia.me.uk/pixelifytica/references.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"
|
||||||
|
git-sync -ns
|
||||||
|
)
|
||||||
|
done
|
||||||
|
|
||||||
|
# Pull NixOS and Emacs config if simple fast-forward
|
||||||
|
PULL_DIRS=(
|
||||||
|
"/etc/nixos"
|
||||||
|
"${XDG_CONFIG_HOME:-$HOME/.config}/emacs"
|
||||||
|
)
|
||||||
|
PULL_URLS=(
|
||||||
|
"https://git.xenia.me.uk/pixelifytica/nixos.git"
|
||||||
|
"https://git.xenia.me.uk/pixelifytica/emacs.git"
|
||||||
|
)
|
||||||
|
for i in "${!PULL_DIRS[@]}"; do
|
||||||
|
DIRECTORY="${PULL_DIRS[$i]}"
|
||||||
|
URL="${PULL_URLS[$i]}"
|
||||||
|
echo "--- pull: $DIRECTORY ---"
|
||||||
|
if [ ! -d "$DIRECTORY" ]; then
|
||||||
|
git clone "$URL" "$DIRECTORY"
|
||||||
|
fi
|
||||||
|
(
|
||||||
|
cd "$DIRECTORY" || exit
|
||||||
|
if [ "$(git branch --show-current)" = "main" ]; then
|
||||||
|
git remote set-url origin "$URL"
|
||||||
|
git pull --ff-only
|
||||||
|
git push
|
||||||
|
else
|
||||||
|
echo "Not syncing repo $DIRECTORY on branch $(git branch --show-current)"
|
||||||
|
fi
|
||||||
|
)
|
||||||
|
done
|
25
scripts/rsync-local-config.sh
Executable file
25
scripts/rsync-local-config.sh
Executable file
|
@ -0,0 +1,25 @@
|
||||||
|
HOST=$1
|
||||||
|
# Config files
|
||||||
|
for TARGET in bat bottom git starship.toml; do
|
||||||
|
SOURCE="$HOME/.config/$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"
|
||||||
|
rsync -avzL --delete --exclude=".git*" $TMP_SOURCE "$HOST:.config/$TARGET"
|
||||||
|
rm -rf $TMP_SOURCE
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# Fonts
|
||||||
|
rsync -avzL --delete --exclude=".git*" --chmod=Du=rwx,Dg=rx,Do=rx,Fu=rw,Fg=r,Fo=r "$(nix path-info flake:iosevka#packages.x86_64-linux.iosevka-custom-nerdfont)/share/fonts/truetype/" "$HOST:.fonts/IosevkaCustomNerdFont"
|
||||||
|
rsync -avzL --delete --exclude=".git*" --chmod=Du=rwx,Dg=rx,Do=rx,Fu=rw,Fg=r,Fo=r "$(nix path-info flake:iosevka#packages.x86_64-linux.iosevka-custom-aile)/share/fonts/truetype/" "$HOST:.fonts/IosevkaCustomAile"
|
38
scripts/sync-all.lua
Executable file
38
scripts/sync-all.lua
Executable file
|
@ -0,0 +1,38 @@
|
||||||
|
#!/usr/bin/env nix-shell
|
||||||
|
--[[
|
||||||
|
#!nix-shell -i lua -p git git-sync
|
||||||
|
]]
|
||||||
|
local config_home
|
||||||
|
if os.getenv("XDG_CONFIG_HOME") then
|
||||||
|
config_home = os.getenv("XDG_CONFIG_HOME")
|
||||||
|
else
|
||||||
|
config_home = "~/.config/"
|
||||||
|
end
|
||||||
|
|
||||||
|
local sync_mapping = {
|
||||||
|
["~/.password-store"] = "https://git.xenia.me.uk/pixelifytica/pass.git",
|
||||||
|
["~/.elfeed"] = "https://git.xenia.me.uk/pixelifytica/elfeed.git",
|
||||||
|
["~/Documents/Org"] = "https://git.xenia.me.uk/pixelifytica/org.git",
|
||||||
|
["~/Documents/References"] = "https://git.xenia.me.uk/pixelifytica/references.git",
|
||||||
|
}
|
||||||
|
|
||||||
|
local pull_mapping = {
|
||||||
|
["/etc/nixos"] = "https://git.xenia.me.uk/pixelifytica/nixos.git",
|
||||||
|
[config_home .. "/emacs"] = "https://git.xenia.me.uk/pixelifytica/emacs.git",
|
||||||
|
}
|
||||||
|
|
||||||
|
local function git_sync(directory, url)
|
||||||
|
print("--- sync: " .. directory .. " ---")
|
||||||
|
end
|
||||||
|
|
||||||
|
local function git_pull(directory, url, ff_only)
|
||||||
|
print("--- pull: " .. directory .. " ---")
|
||||||
|
end
|
||||||
|
|
||||||
|
for directory, url in pairs(sync_mapping) do
|
||||||
|
git_sync(directory, url)
|
||||||
|
end
|
||||||
|
|
||||||
|
for directory, url in pairs(pull_mapping) do
|
||||||
|
git_pull(directory, url, true)
|
||||||
|
end
|
68
scripts/sync-all.py
Executable file
68
scripts/sync-all.py
Executable file
|
@ -0,0 +1,68 @@
|
||||||
|
#!/usr/bin/env nix-shell
|
||||||
|
#!nix-shell -i python3 -p git git-sync
|
||||||
|
|
||||||
|
import os
|
||||||
|
import queue
|
||||||
|
import subprocess
|
||||||
|
from pathlib import Path
|
||||||
|
from typing import Dict
|
||||||
|
|
||||||
|
HOME = Path("~").expanduser().resolve()
|
||||||
|
|
||||||
|
SYNC_MAPPING: Dict[Path, str] = {
|
||||||
|
Path(
|
||||||
|
"~/.password-store"
|
||||||
|
).expanduser(): "https://git.xenia.me.uk/pixelifytica/pass.git",
|
||||||
|
Path("~/.elfeed").expanduser(): "https://git.xenia.me.uk/pixelifytica/elfeed.git",
|
||||||
|
Path(
|
||||||
|
"~/Documents/Org"
|
||||||
|
).expanduser(): "https://git.xenia.me.uk/pixelifytica/org.git",
|
||||||
|
Path(
|
||||||
|
"~/Documents/References"
|
||||||
|
).expanduser(): "https://git.xenia.me.uk/pixelifytica/references.git",
|
||||||
|
}
|
||||||
|
|
||||||
|
PULL_MAPPINGS: Dict[Path, str] = {
|
||||||
|
Path("/etc/nixos"): "https://git.xenia.me.uk/pixelifytica/nixos.git",
|
||||||
|
Path(os.getenv("XDG_CONFIG_HOME", "~/.config")).expanduser()
|
||||||
|
/ "emacs": "https://git.xenia.me.uk/pixelifytica/emacs.git",
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def git_set_url(directory: Path, url: str) -> None:
|
||||||
|
"""Set url for directory"""
|
||||||
|
comp = subprocess.run(f"git remote set-url origin {url}".split(), cwd=directory)
|
||||||
|
if comp.returncode != 0:
|
||||||
|
raise UserWarning(f"{comp.returncode} from {' '.join(comp.args)}")
|
||||||
|
subprocess.run("git remote -v".split(), cwd=directory)
|
||||||
|
|
||||||
|
|
||||||
|
def git_sync(directory: Path, url: str) -> subprocess.CompletedProcess:
|
||||||
|
"""Sync status of repository"""
|
||||||
|
print(f"--- sync: ${directory} ---")
|
||||||
|
if not directory.exists():
|
||||||
|
return subprocess.run("exit 1".split()) # TODO
|
||||||
|
git_set_url(directory, url)
|
||||||
|
return subprocess.run("git-sync -ns".split(), cwd=directory)
|
||||||
|
|
||||||
|
|
||||||
|
def git_pull(
|
||||||
|
directory: Path, url: str, ff_only: bool = True
|
||||||
|
) -> subprocess.CompletedProcess:
|
||||||
|
"""Pull updates for directory from url"""
|
||||||
|
print(f"--- pull: {directory} ---")
|
||||||
|
if not directory.exists():
|
||||||
|
return subprocess.run("exit 1".split()) # TODO
|
||||||
|
git_set_url(directory, url)
|
||||||
|
return subprocess.run("git pull --ff-only".split(), cwd=directory)
|
||||||
|
|
||||||
|
|
||||||
|
def main(*args, **kwargs) -> None:
|
||||||
|
for directory, url in SYNC_MAPPING.items():
|
||||||
|
print(git_sync(directory, url))
|
||||||
|
for directory, url in PULL_MAPPINGS.items():
|
||||||
|
print(git_pull(directory, url))
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
3
scripts/xdg-query-program.sh
Executable file
3
scripts/xdg-query-program.sh
Executable file
|
@ -0,0 +1,3 @@
|
||||||
|
FILETYPE=$(xdg-mime query filetype $@)
|
||||||
|
DEFAULT=$(xdg-mime query default $FILETYPE)
|
||||||
|
echo "$FILETYPE -> $DEFAULT"
|
22
services/avizo/default.nix
Normal file
22
services/avizo/default.nix
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
{
|
||||||
|
config,
|
||||||
|
accentColour ? "base07",
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
services.avizo = {
|
||||||
|
enable = true;
|
||||||
|
settings.default = with config.scheme; let
|
||||||
|
accent = {
|
||||||
|
r = config.scheme."${accentColour}-rgb-r";
|
||||||
|
g = config.scheme."${accentColour}-rgb-g";
|
||||||
|
b = config.scheme."${accentColour}-rgb-b";
|
||||||
|
};
|
||||||
|
in {
|
||||||
|
background = "rgba(${base00-rgb-r}, ${base00-rgb-g}, ${base00-rgb-b}, 0.8)";
|
||||||
|
bar-bg-color = "rgba(${base00-rgb-r}, ${base00-rgb-g}, ${base00-rgb-b}, 0.8)";
|
||||||
|
bar-fg-color = "rgba(${base05-rgb-r}, ${base05-rgb-g}, ${base05-rgb-b}, 1.0)";
|
||||||
|
border-color = "rgba(${accent.r}, ${accent.g}, ${accent.b}, 1.0)";
|
||||||
|
image-opacity = "1.0";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
39
services/email/davmail.properties
Normal file
39
services/email/davmail.properties
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
davmail.server=true
|
||||||
|
davmail.mode=O365Manual
|
||||||
|
davmail.url=https://outlook.office365.com/EWS/Exchange.asmx
|
||||||
|
davmail.imapPort=1144
|
||||||
|
davmail.smtpPort=1026
|
||||||
|
davmail.caldavPort=1080
|
||||||
|
davmail.enableKeepAlive=true
|
||||||
|
davmail.logFilePath=/tmp/davmail.log
|
||||||
|
davmail.enableKerberos=false
|
||||||
|
davmail.forceActiveSyncUpdate=false
|
||||||
|
davmail.imapAutoExpunge=true
|
||||||
|
davmail.useSystemProxies=false
|
||||||
|
davmail.caldavEditNotifications=false
|
||||||
|
davmail.ssl.nosecuresmtp=false
|
||||||
|
davmail.caldavPastDelay=0
|
||||||
|
log4j.logger.httpclient.wire=WARN
|
||||||
|
davmail.popMarkReadOnRetr=false
|
||||||
|
davmail.ssl.nosecureimap=false
|
||||||
|
davmail.disableTrayActivitySwitch=true
|
||||||
|
davmail.caldavAutoSchedule=true
|
||||||
|
davmail.enableProxy=false
|
||||||
|
davmail.smtpSaveInSent=false
|
||||||
|
davmail.ssl.nosecurepop=false
|
||||||
|
log4j.rootLogger=WARN
|
||||||
|
log4j.logger.davmail=DEBUG
|
||||||
|
davmail.ssl.clientKeystorePass=
|
||||||
|
log4j.logger.org.apache.http.conn.ssl=WARN
|
||||||
|
davmail.sentKeepDelay=0
|
||||||
|
davmail.ssl.nosecureldap=false
|
||||||
|
davmail.imapAlwaysApproxMsgSize=true
|
||||||
|
davmail.ssl.nosecurecaldav=false
|
||||||
|
davmail.showStartupBanner=false
|
||||||
|
log4j.logger.httpclient=WARN
|
||||||
|
log4j.logger.org.apache.http.wire=WARN
|
||||||
|
davmail.disableGuiNotifications=true
|
||||||
|
davmail.disableUpdateCheck=true
|
||||||
|
log4j.logger.org.apache.http=WARN
|
||||||
|
davmail.carddavReadPhoto=true
|
||||||
|
davmail.keepDelay=30
|
81
services/email/default.nix
Normal file
81
services/email/default.nix
Normal file
|
@ -0,0 +1,81 @@
|
||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
hostName,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
accounts.email = {
|
||||||
|
maildirBasePath = "Mail";
|
||||||
|
accounts = let
|
||||||
|
realName = "Evie Litherland-Smith";
|
||||||
|
in {
|
||||||
|
proton = let
|
||||||
|
host = "127.0.0.1";
|
||||||
|
tls.enable = false;
|
||||||
|
in rec {
|
||||||
|
inherit realName;
|
||||||
|
primary = true;
|
||||||
|
maildir.path = "Proton";
|
||||||
|
imap = {
|
||||||
|
inherit host tls;
|
||||||
|
port = 1143;
|
||||||
|
};
|
||||||
|
smtp = {
|
||||||
|
inherit host tls;
|
||||||
|
port = 1025;
|
||||||
|
};
|
||||||
|
address = "e.litherlandsmith@proton.me";
|
||||||
|
aliases = ["evie@xenia.me.uk" "evie@litherlandsmith.slmail.me"];
|
||||||
|
userName = address;
|
||||||
|
passwordCommand = "${pkgs.pass}/bin/pass show mbsync/${hostName}/proton | head -n1";
|
||||||
|
mu.enable = true;
|
||||||
|
msmtp = {
|
||||||
|
enable = true;
|
||||||
|
extraConfig = {
|
||||||
|
tls = "off";
|
||||||
|
auth = "login";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
mbsync = {
|
||||||
|
enable = true;
|
||||||
|
create = "both";
|
||||||
|
expunge = "both";
|
||||||
|
remove = "both";
|
||||||
|
patterns = ["*" "!All Mail" "!Labels*" "!Starred" "!Recovered Messages"];
|
||||||
|
subFolders = "Verbatim";
|
||||||
|
extraConfig.account.AuthMechs = "LOGIN";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
icloud = rec {
|
||||||
|
inherit realName;
|
||||||
|
primary = false;
|
||||||
|
maildir.path = "iCloud";
|
||||||
|
imap.host = "imap.mail.me.com";
|
||||||
|
smtp.host = "smtp.mail.me.com";
|
||||||
|
address = "e.litherlandsmith@icloud.com";
|
||||||
|
userName = address;
|
||||||
|
passwordCommand = "${pkgs.pass}/bin/pass show mbsync/${hostName}/icloud | head -n1";
|
||||||
|
mu.enable = true;
|
||||||
|
msmtp.enable = true;
|
||||||
|
mbsync = {
|
||||||
|
enable = true;
|
||||||
|
create = "both";
|
||||||
|
expunge = "both";
|
||||||
|
remove = "both";
|
||||||
|
patterns = ["*" "!Notes"];
|
||||||
|
subFolders = "Verbatim";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
programs = {
|
||||||
|
mu.enable = true;
|
||||||
|
msmtp.enable = true;
|
||||||
|
mbsync = {
|
||||||
|
enable = true;
|
||||||
|
groups.inboxes = {
|
||||||
|
proton = ["INBOX"];
|
||||||
|
icloud = ["INBOX"];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
3
services/email/signatures/personal
Normal file
3
services/email/signatures/personal
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
--
|
||||||
|
Evelyn Litherland-Smith (she/they)
|
||||||
|
email: evie@xenia.me.uk
|
5
services/email/signatures/work
Normal file
5
services/email/signatures/work
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
--
|
||||||
|
Evelyn Litherland-Smith (she/they)
|
||||||
|
Spectroscopy Diagnostic Physicist
|
||||||
|
Plasma Science and Fusion Operations
|
||||||
|
UK Atomic Energy Authority
|
69
services/email/work.nix
Normal file
69
services/email/work.nix
Normal file
|
@ -0,0 +1,69 @@
|
||||||
|
{
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
hostName,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
imports = [./default.nix];
|
||||||
|
accounts.email.accounts.outlook = let
|
||||||
|
host = "127.0.0.1";
|
||||||
|
tls.enable = false;
|
||||||
|
in rec {
|
||||||
|
inherit (config.accounts.email.accounts.proton) realName;
|
||||||
|
primary = false;
|
||||||
|
maildir.path = "Outlook";
|
||||||
|
imap = {
|
||||||
|
inherit host tls;
|
||||||
|
port = 1144;
|
||||||
|
};
|
||||||
|
smtp = {
|
||||||
|
inherit host tls;
|
||||||
|
port = 1026;
|
||||||
|
};
|
||||||
|
address = "evie.litherland-smith@ukaea.uk";
|
||||||
|
aliases = ["elitherl@jet.uk"];
|
||||||
|
userName = address;
|
||||||
|
passwordCommand = "${pkgs.pass}/bin/pass show mbsync/${hostName}/outlook | head -n1";
|
||||||
|
mu.enable = true;
|
||||||
|
msmtp = {
|
||||||
|
enable = true;
|
||||||
|
extraConfig = {
|
||||||
|
tls = "off";
|
||||||
|
auth = "login";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
mbsync = {
|
||||||
|
enable = true;
|
||||||
|
create = "both";
|
||||||
|
expunge = "both";
|
||||||
|
remove = "both";
|
||||||
|
patterns = [
|
||||||
|
"*"
|
||||||
|
"!Conversation History"
|
||||||
|
"!Snoozed"
|
||||||
|
"!Social Activity Notifications"
|
||||||
|
"!Sync Issues*"
|
||||||
|
"!Unsent Messages"
|
||||||
|
];
|
||||||
|
subFolders = "Verbatim";
|
||||||
|
extraConfig.account.AuthMechs = "LOGIN";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
programs.mbsync.groups.inboxes.outlook = ["INBOX"];
|
||||||
|
systemd.user.services.davmail = {
|
||||||
|
Unit = {
|
||||||
|
Description = "Davmail server";
|
||||||
|
Wants = ["network-online.target"];
|
||||||
|
After = ["network-online.target"];
|
||||||
|
};
|
||||||
|
Service = {
|
||||||
|
Environment = ["PATH=/run/current-system/sw/bin/:$PATH"];
|
||||||
|
Restart = "always";
|
||||||
|
ExecStartPre = with config.home; ''
|
||||||
|
/bin/sh -c "if [ ! -f ${homeDirectory}/.davmail.properties ]; then cp ${./davmail.properties} ${homeDirectory}/.davmail.properties; fi; chmod 644 ${homeDirectory}/.davmail.properties"
|
||||||
|
'';
|
||||||
|
ExecStart = "${pkgs.davmail}/bin/davmail -notray ${config.home.homeDirectory}/.davmail.properties";
|
||||||
|
};
|
||||||
|
Install.WantedBy = ["default.target"];
|
||||||
|
};
|
||||||
|
}
|
41
services/password-store/default.nix
Normal file
41
services/password-store/default.nix
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
xdg.configFile."pass-git-helper/git-pass-mapping.ini".source =
|
||||||
|
./git-pass-mapping.ini;
|
||||||
|
programs = {
|
||||||
|
gpg.enable = true;
|
||||||
|
password-store = {
|
||||||
|
enable = true;
|
||||||
|
package =
|
||||||
|
pkgs.pass-nodmenu.withExtensions
|
||||||
|
(exts: with exts; [pass-otp pass-update pass-import]); # pass-audit
|
||||||
|
settings = {
|
||||||
|
PASSWORD_STORE_DIR = "${config.home.homeDirectory}/.password-store";
|
||||||
|
PASSWORD_STORE_ENABLE_EXTENSIONS = "true";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
git.extraConfig.credential = {
|
||||||
|
helper = "${pkgs.pass-git-helper}/bin/pass-git-helper";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
services = {
|
||||||
|
gpg-agent = rec {
|
||||||
|
enable = true;
|
||||||
|
maxCacheTtl = 86400;
|
||||||
|
defaultCacheTtl = maxCacheTtl;
|
||||||
|
defaultCacheTtlSsh = maxCacheTtl;
|
||||||
|
pinentryFlavor = lib.mkDefault "curses";
|
||||||
|
extraConfig = ''
|
||||||
|
no-allow-external-cache
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
git-sync.repositories.password-store = {
|
||||||
|
path = "${config.home.homeDirectory}/.password-store";
|
||||||
|
uri = "git+https://git.xenia.me.uk/xenia/pass.git";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
6
services/password-store/git-pass-mapping.ini
Normal file
6
services/password-store/git-pass-mapping.ini
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
[DEFAULT]
|
||||||
|
username_extractor=regex_search
|
||||||
|
regex_username=^login: (.*)$
|
||||||
|
|
||||||
|
[*]
|
||||||
|
target=git/${host}
|
Reference in a new issue