nixos/users/malte/default.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";
};
}