266 lines
6.4 KiB
Nix
266 lines
6.4 KiB
Nix
{
|
|
pkgs,
|
|
nixosConfig,
|
|
nix-colors,
|
|
...
|
|
}: let
|
|
wrap = name: pkg: postBuild:
|
|
pkgs.symlinkJoin {
|
|
inherit name postBuild;
|
|
paths = [pkg];
|
|
buildInputs = [pkgs.makeWrapper];
|
|
};
|
|
|
|
fixGdk = name: pkg:
|
|
wrap name pkg ''
|
|
wrapProgram $out/bin/${name} --set GDK_BACKEND x11
|
|
'';
|
|
|
|
fixElectron = name: pkg:
|
|
wrap name pkg ''
|
|
wrapProgram $out/bin/${name} --add-flags "--enable-features=UseOzonePlatform --ozone-platform=wayland"
|
|
'';
|
|
|
|
lutrisWithLibs = pkgs.lutris.override {
|
|
extraLibraries = pkgs:
|
|
with pkgs; [
|
|
xz
|
|
libstdcxx5
|
|
# For Hotline: Miami
|
|
expat
|
|
openal
|
|
nvidia_cg_toolkit
|
|
# For Dead Cells
|
|
# Provides libXss.1
|
|
xorg.libXScrnSaver
|
|
];
|
|
};
|
|
|
|
firefoxWithProfile = exe: profile:
|
|
pkgs.writeShellApplication {
|
|
name = exe;
|
|
runtimeInputs = [pkgs.firefox];
|
|
text = ''
|
|
firefox -P "${profile}"
|
|
'';
|
|
};
|
|
|
|
heygptRaw = pkgs.heygpt.overrideAttrs (_: {
|
|
src = builtins.trace "REMOVE heygpt override after hash fix lands" (pkgs.fetchFromGitHub {
|
|
owner = "fuyufjh";
|
|
repo = "heygpt";
|
|
rev = "v0.4.1";
|
|
hash = "sha256-oP0yIdYytXSsbZ2pNaZ8Rrak1qJsudTe/oP6dGncGUM=";
|
|
});
|
|
patches = [../../patches/heygpt-default-model.patch];
|
|
});
|
|
|
|
heygptWrapper = pkgs.writeShellApplication {
|
|
name = "heygpt";
|
|
text = ''
|
|
OPENAI_API_KEY=$(cat ${nixosConfig.sops.secrets.openai-heygpt-api-key.path}) ${heygptRaw}/bin/heygpt "$@"
|
|
'';
|
|
};
|
|
|
|
tren = pkgs.writeShellApplication {
|
|
name = "tren";
|
|
runtimeInputs = [heygptWrapper];
|
|
text = ''
|
|
POSITIONAL_ARGS=()
|
|
|
|
lang=en
|
|
|
|
while [[ $# -gt 0 ]]; do
|
|
case $1 in
|
|
-l|--lang)
|
|
lang="$2"
|
|
shift # past argument
|
|
shift # past value
|
|
;;
|
|
--*|-*)
|
|
echo "Unknown option $1"
|
|
exit 1
|
|
;;
|
|
*)
|
|
POSITIONAL_ARGS+=("$1") # save positional arg
|
|
shift # past argument
|
|
;;
|
|
esac
|
|
done
|
|
|
|
set -- "''${POSITIONAL_ARGS[@]}" # restore positional parameters
|
|
|
|
heygpt --system "Output an unordered list of up to 6 possible translations to language $lang for the given word. No explanation. Markdown format." "$@"
|
|
'';
|
|
};
|
|
|
|
fixWord = pkgs.writeShellApplication {
|
|
name = "fix-word";
|
|
runtimeInputs = [heygptWrapper];
|
|
text = ''
|
|
heygpt --system "You will correct any spelling mistakes in the input. No explanations." "$@"
|
|
'';
|
|
};
|
|
in {
|
|
imports = [
|
|
./modules/git.nix
|
|
./modules/shell.nix
|
|
./modules/kitty.nix
|
|
./modules/gpg.nix
|
|
./modules/mail.nix
|
|
./modules/pass.nix
|
|
./modules/zathura.nix
|
|
./modules/scarlett-solo.nix
|
|
./modules/helix.nix
|
|
./modules/mpv.nix
|
|
./modules/broot.nix
|
|
./modules/hypr.nix
|
|
./modules/notes.nix
|
|
../modules/restic-backup.nix
|
|
../modules/colors.nix
|
|
../modules/profiles-cleanup.nix
|
|
];
|
|
|
|
config = {
|
|
settings.hyprland.enable = true;
|
|
settings.mail.enable = true;
|
|
|
|
# Define my color schemes
|
|
colorsLight = nix-colors.colorSchemes."gruvbox-light-medium";
|
|
colorsDark = nix-colors.colorSchemes."gruvbox-dark-medium";
|
|
|
|
home = {
|
|
packages =
|
|
[
|
|
pkgs.prismlauncher
|
|
pkgs.jq
|
|
pkgs.mosh
|
|
pkgs.wl-clipboard
|
|
lutrisWithLibs
|
|
(firefoxWithProfile "ff" "default")
|
|
(firefoxWithProfile "ff-work" "Work")
|
|
]
|
|
++ (with pkgs; [
|
|
alejandra
|
|
element-desktop-wayland
|
|
feh
|
|
(fixElectron "mattermost-desktop" mattermost-desktop)
|
|
(fixGdk "Discord" discord)
|
|
(fixGdk "losslesscut" losslesscut-bin)
|
|
(fixGdk "skypeforlinux" skypeforlinux)
|
|
# geekbench
|
|
gimp
|
|
gnome3.nautilus
|
|
gnome3.sushi
|
|
gnome.simple-scan
|
|
helvum
|
|
heygptWrapper
|
|
hledger
|
|
inkscape
|
|
kbdlight
|
|
libnotify
|
|
libreoffice
|
|
mensa
|
|
nickel
|
|
patchelf
|
|
pavucontrol
|
|
pdftk
|
|
pkgs."2i-emulator"
|
|
ponymix
|
|
pulseaudio
|
|
python3
|
|
qt5ct
|
|
rtorrent
|
|
screenfetch
|
|
signal-desktop # FIXME: Once it works again? (fixElectron "signal-desktop" signal-desktop)
|
|
sshfs
|
|
tdesktop
|
|
tren
|
|
fixWord
|
|
unar
|
|
unison
|
|
vlc
|
|
vscode
|
|
wev
|
|
xdg_utils
|
|
xournalpp
|
|
yt-dlp # youtube-dl alternative that doesn't suck
|
|
]);
|
|
|
|
sessionVariables = {
|
|
MOZ_USE_XINPUT2 = "1";
|
|
OPENAI_API_BASE = "https://api.openai.com/v1";
|
|
};
|
|
|
|
# Use default US, so that games don't get too confused. But let me
|
|
# switch to a more comfortable workman layout!
|
|
keyboard = null;
|
|
|
|
# Use some german units and formats but with the english language!
|
|
language = {
|
|
base = "en_US.UTF-8";
|
|
address = "de_DE.UTF-8";
|
|
measurement = "de_DE.UTF-8";
|
|
monetary = "de_DE.UTF-8";
|
|
name = "de_DE.UTF-8";
|
|
paper = "de_DE.UTF-8";
|
|
telephone = "de_DE.UTF-8";
|
|
time = "de_DE.UTF-8";
|
|
};
|
|
};
|
|
|
|
xdg.enable = true;
|
|
|
|
# Make sure firefox is my default browser
|
|
programs.firefox.enable = true;
|
|
|
|
programs.obs-studio = {
|
|
enable = true;
|
|
plugins = [
|
|
pkgs.obs-studio-plugins.wlrobs
|
|
#pkgs.obs-studio-plugins.v4l2sink
|
|
];
|
|
};
|
|
|
|
# Configure restic backups
|
|
services.restic = {
|
|
enable = true;
|
|
paths = [
|
|
"/home/malte/Documents"
|
|
"/home/malte/Lieder"
|
|
"/home/malte/Pictures"
|
|
"/home/malte/Uni"
|
|
"/home/malte/helden"
|
|
"/home/malte/ledger"
|
|
"/home/malte/vimwiki"
|
|
];
|
|
};
|
|
|
|
services.darkman = {
|
|
enable = true;
|
|
settings = {
|
|
lat = 51.34;
|
|
lng = 12.36;
|
|
};
|
|
};
|
|
|
|
services.mpris-proxy.enable = true;
|
|
services.pasystray.enable = true;
|
|
|
|
services.pueue = {
|
|
enable = true;
|
|
settings = {
|
|
shared = {};
|
|
daemon.callback = "notify-send \"Task {{ id }}\nCommand: {{ command }}\nStatus '{{ result }}'\nTook: $(${pkgs.bc}/bin/bc <<< \"{{end}} - {{start}}\") seconds\"";
|
|
};
|
|
};
|
|
programs.fish.shellAliases.p = "pueue";
|
|
|
|
fonts.fontconfig.enable = true;
|
|
|
|
home.file.".yubico/authorized_yubikeys".text = "malte:ccccccvblrrf";
|
|
|
|
home.stateVersion = "18.09";
|
|
};
|
|
}
|