Compare commits

..

18 Commits

Author SHA1 Message Date
0b01ed04f5 style(home/tilo): better format file 2025-09-03 11:46:28 +02:00
4e97947206 feat(jujutsu): better jujutsu configuration 2025-09-03 11:46:06 +02:00
b7b18f664e feat(sunshine): customise apps available in Sunshine 2025-09-03 11:45:32 +02:00
b277018b88 feat(networking): enable tailscale 2025-09-01 15:00:28 +02:00
84ab691a7f chore: update flakes 2025-08-24 01:37:45 +02:00
71623b5964 feat(sound): add noisetorch when sound is enabled 2025-08-07 11:41:42 +02:00
ee0bc337e6 fix(marpa): fix location of dotfiles 2025-08-07 11:41:42 +02:00
4bf86c7b37 feat(secrets): update private SSH config 2025-08-07 11:17:18 +02:00
4b6d42d275 feat(packages): remove Modrinth
Tired of compiling it every time I update my laptop, I’ll install it
with Flatpak instead.
2025-08-07 11:12:20 +02:00
a67a4f5826 fix(gampo): correctly set dotfiles location 2025-08-07 11:07:58 +02:00
5659cceab5 feat(tilo): add jellyfin configuration 2025-08-05 01:02:05 +02:00
2921f3f435 feat(tilo): add calibre configuration 2025-08-05 00:09:15 +02:00
319d292fa0 feat(tilo): add Plex configuration for Tilo 2025-08-04 22:48:43 +02:00
1eb4476006 fix: correct values for host Tilo 2025-08-04 22:46:25 +02:00
338246498d docs: update README to reflect refactor 2025-07-31 01:02:10 +02:00
f396b3a8fb chore: refactor user modules 2025-07-31 00:58:33 +02:00
15a39660eb chore: refactor system modules 2025-07-31 00:58:33 +02:00
d64caa86ec feat(jujutsu): update my config with new aliases 2025-07-31 00:58:29 +02:00
34 changed files with 222 additions and 649 deletions

1
.envrc
View File

@@ -1,4 +1,3 @@
# -*- mode: sh; -*-
if ! has nix_direnv_version || ! nix_direnv_version 2.2.1; then if ! has nix_direnv_version || ! nix_direnv_version 2.2.1; then
source_url "https://raw.githubusercontent.com/nix-community/nix-direnv/2.2.1/direnvrc" "sha256-zelF0vLbEl5uaqrfIzbgNzJWGmLzCmYAkInj/LNxvKs=" source_url "https://raw.githubusercontent.com/nix-community/nix-direnv/2.2.1/direnvrc" "sha256-zelF0vLbEl5uaqrfIzbgNzJWGmLzCmYAkInj/LNxvKs="
fi fi

143
flake.lock generated
View File

@@ -6,8 +6,7 @@
"devenv" "devenv"
], ],
"flake-compat": [ "flake-compat": [
"devenv", "devenv"
"flake-compat"
], ],
"git-hooks": [ "git-hooks": [
"devenv", "devenv",
@@ -19,11 +18,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1760971495, "lastModified": 1748883665,
"narHash": "sha256-IwnNtbNVrlZIHh7h4Wz6VP0Furxg9Hh0ycighvL5cZc=", "narHash": "sha256-R0W7uAg+BLoHjMRMQ8+oiSbTq8nkGz5RDpQ+ZfxxP3A=",
"owner": "cachix", "owner": "cachix",
"repo": "cachix", "repo": "cachix",
"rev": "c5bfd933d1033672f51a863c47303fc0e093c2d2", "rev": "f707778d902af4d62d8dd92c269f8e70de09acbe",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -33,32 +32,10 @@
"type": "github" "type": "github"
} }
}, },
"claude-desktop": {
"inputs": {
"flake-utils": "flake-utils",
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1761825061,
"narHash": "sha256-AeRQZKr8+1XQer+WmbwtQaQBy05UDgeNNE7YZjNLuS0=",
"owner": "k3d3",
"repo": "claude-desktop-linux-flake",
"rev": "791cd93cfe216ad06ab740f0fdc142119b1d6ec2",
"type": "github"
},
"original": {
"owner": "k3d3",
"repo": "claude-desktop-linux-flake",
"type": "github"
}
},
"devenv": { "devenv": {
"inputs": { "inputs": {
"cachix": "cachix", "cachix": "cachix",
"flake-compat": "flake-compat", "flake-compat": "flake-compat",
"flake-parts": "flake-parts",
"git-hooks": "git-hooks", "git-hooks": "git-hooks",
"nix": "nix", "nix": "nix",
"nixpkgs": [ "nixpkgs": [
@@ -66,11 +43,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1761922975, "lastModified": 1755961020,
"narHash": "sha256-j4EB5ku/gDm7h7W7A+k70RYj5nUiW/l9wQtXMJUD2hg=", "narHash": "sha256-Fs0CWiUA78Qgbc9zVk+zUN7pEkMPffnd//JsDtUUWBM=",
"owner": "cachix", "owner": "cachix",
"repo": "devenv", "repo": "devenv",
"rev": "c9f0b47815a4895fadac87812de8a4de27e0ace1", "rev": "abb198476023189fc45a01bd6502f5ca6ea62bd0",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -82,11 +59,11 @@
"flake-compat": { "flake-compat": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1761588595, "lastModified": 1747046372,
"narHash": "sha256-XKUZz9zewJNUj46b4AJdiRZJAvSZ0Dqj2BNfXvFlJC4=", "narHash": "sha256-CIVLLkVgvHYbgI2UpXvIIBJ12HWgX+fjA8Xf8PUmqCY=",
"owner": "edolstra", "owner": "edolstra",
"repo": "flake-compat", "repo": "flake-compat",
"rev": "f387cd2afec9419c8ee37694406ca490c3f34ee5", "rev": "9100a0f413b0c601e0533d1d94ffd501ce2e7885",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -99,15 +76,16 @@
"inputs": { "inputs": {
"nixpkgs-lib": [ "nixpkgs-lib": [
"devenv", "devenv",
"nix",
"nixpkgs" "nixpkgs"
] ]
}, },
"locked": { "locked": {
"lastModified": 1760948891, "lastModified": 1733312601,
"narHash": "sha256-TmWcdiUUaWk8J4lpjzu4gCGxWY6/Ok7mOK4fIFfBuU4=", "narHash": "sha256-4pDvzqnegAfRkPwO3wmwBhVi/Sye1mzps0zHWYnP88c=",
"owner": "hercules-ci", "owner": "hercules-ci",
"repo": "flake-parts", "repo": "flake-parts",
"rev": "864599284fc7c0ba6357ed89ed5e2cd5040f0c04", "rev": "205b12d8b7cd4802fbcb8e8ef6a0f1408781a4f9",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -134,24 +112,6 @@
"type": "github" "type": "github"
} }
}, },
"flake-utils_2": {
"inputs": {
"systems": "systems_2"
},
"locked": {
"lastModified": 1731533236,
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"git-hooks": { "git-hooks": {
"inputs": { "inputs": {
"flake-compat": [ "flake-compat": [
@@ -165,11 +125,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1760663237, "lastModified": 1750779888,
"narHash": "sha256-BflA6U4AM1bzuRMR8QqzPXqh8sWVCNDzOdsxXEguJIc=", "narHash": "sha256-wibppH3g/E2lxU43ZQHC5yA/7kIKLGxVEnsnVK1BtRg=",
"owner": "cachix", "owner": "cachix",
"repo": "git-hooks.nix", "repo": "git-hooks.nix",
"rev": "ca5b894d3e3e151ffc1db040b6ce4dcc75d31c37", "rev": "16ec914f6fb6f599ce988427d9d94efddf25fe6d",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -207,11 +167,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1761878381, "lastModified": 1755914636,
"narHash": "sha256-lCRaipHgszaFZ1Cs8fdGJguVycCisBAf2HEFgip5+xU=", "narHash": "sha256-VJ+Gm6YsHlPfUCpmRQxvdiZW7H3YPSrdVOewQHAhZN8=",
"owner": "nix-community", "owner": "nix-community",
"repo": "home-manager", "repo": "home-manager",
"rev": "4ac96eb21c101a3e5b77ba105febc5641a8959aa", "rev": "8b55a6ac58b678199e5bba701aaff69e2b3281c0",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -226,10 +186,7 @@
"devenv", "devenv",
"flake-compat" "flake-compat"
], ],
"flake-parts": [ "flake-parts": "flake-parts",
"devenv",
"flake-parts"
],
"git-hooks-nix": [ "git-hooks-nix": [
"devenv", "devenv",
"git-hooks" "git-hooks"
@@ -246,16 +203,16 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1761648602, "lastModified": 1755029779,
"narHash": "sha256-H97KSB/luq/aGobKRuHahOvT1r7C03BgB6D5HBZsbN8=", "narHash": "sha256-3+GHIYGg4U9XKUN4rg473frIVNn8YD06bjwxKS1IPrU=",
"owner": "cachix", "owner": "cachix",
"repo": "nix", "repo": "nix",
"rev": "3e5644da6830ef65f0a2f7ec22830c46285bfff6", "rev": "b0972b0eee6726081d10b1199f54de6d2917f861",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "cachix", "owner": "cachix",
"ref": "devenv-2.30.6", "ref": "devenv-2.30",
"repo": "nix", "repo": "nix",
"type": "github" "type": "github"
} }
@@ -267,11 +224,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1761451000, "lastModified": 1755404379,
"narHash": "sha256-qBJL6xEIjqYq9zOcG2vf2nPTeVBppNJzvO0LuQWMwMo=", "narHash": "sha256-Q6ZxZDBmD/B988Jjbx7/NchxOKIpOKBBrx9Yb0zMzpQ=",
"owner": "nix-community", "owner": "nix-community",
"repo": "nix-index-database", "repo": "nix-index-database",
"rev": "ed6b293161b378a7368cda38659eb8d3d9a0dac4", "rev": "ebbc1c05f786ae39bb5e04e57bf2c10c44a649e3",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -282,11 +239,11 @@
}, },
"nixpkgs": { "nixpkgs": {
"locked": { "locked": {
"lastModified": 1761907660, "lastModified": 1755615617,
"narHash": "sha256-kJ8lIZsiPOmbkJypG+B5sReDXSD1KGu2VEPNqhRa/ew=", "narHash": "sha256-HMwfAJBdrr8wXAkbGhtcby1zGFvs+StOp19xNsbqdOg=",
"owner": "nixos", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "2fb006b87f04c4d3bdf08cfdbc7fab9c13d94a15", "rev": "20075955deac2583bb12f07151c2df830ef346b4",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -298,7 +255,7 @@
}, },
"pumo-system-info": { "pumo-system-info": {
"inputs": { "inputs": {
"flake-utils": "flake-utils_2", "flake-utils": "flake-utils",
"nixpkgs": [ "nixpkgs": [
"nixpkgs" "nixpkgs"
], ],
@@ -325,11 +282,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1761897390, "lastModified": 1753595452,
"narHash": "sha256-er4gYrIoThYLjlsOMTysoRfn67d1Gci+ZpqDrtQxrA0=", "narHash": "sha256-vqkSDvh7hWhPvNjMjEDV4KbSCv2jyl2Arh73ZXe274k=",
"ref": "refs/heads/master", "ref": "refs/heads/master",
"rev": "fc704e6b5d445899a1565955268c91942a4f263f", "rev": "a5431dd02dc23d9ef1680e67777fed00fe5f7cda",
"revCount": 700, "revCount": 665,
"type": "git", "type": "git",
"url": "https://git.outfoxxed.me/quickshell/quickshell" "url": "https://git.outfoxxed.me/quickshell/quickshell"
}, },
@@ -340,7 +297,6 @@
}, },
"root": { "root": {
"inputs": { "inputs": {
"claude-desktop": "claude-desktop",
"devenv": "devenv", "devenv": "devenv",
"home-manager": "home-manager", "home-manager": "home-manager",
"nix-index-database": "nix-index-database", "nix-index-database": "nix-index-database",
@@ -379,11 +335,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1760998189, "lastModified": 1754988908,
"narHash": "sha256-ee2e1/AeGL5X8oy/HXsZQvZnae6XfEVdstGopKucYLY=", "narHash": "sha256-t+voe2961vCgrzPFtZxha0/kmFSHFobzF00sT8p9h0U=",
"owner": "Mic92", "owner": "Mic92",
"repo": "sops-nix", "repo": "sops-nix",
"rev": "5a7d18b5c55642df5c432aadb757140edfeb70b3", "rev": "3223c7a92724b5d804e9988c6b447a0d09017d48",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -407,21 +363,6 @@
"type": "github" "type": "github"
} }
}, },
"systems_2": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
},
"zen-browser": { "zen-browser": {
"inputs": { "inputs": {
"nixpkgs": [ "nixpkgs": [
@@ -429,11 +370,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1761883599, "lastModified": 1754886070,
"narHash": "sha256-ntnfAAqSuXI/+uqXAWUjbY5arB7sRK9cpgFbHbCZgK8=", "narHash": "sha256-MZDmxOkVKL1HY72bliN8Gxh0SYkHUa3W/1fTU2ke36I=",
"owner": "youwen5", "owner": "youwen5",
"repo": "zen-browser-flake", "repo": "zen-browser-flake",
"rev": "5355c0dc6857a2aa34b126fb4a93a454ed702f52", "rev": "e37d2b326311320c8571111b3ef89b29d26d4b64",
"type": "github" "type": "github"
}, },
"original": { "original": {

View File

@@ -34,11 +34,6 @@
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
claude-desktop = {
url = "github:k3d3/claude-desktop-linux-flake";
inputs.nixpkgs.follows = "nixpkgs";
};
zen-browser = { zen-browser = {
url = "github:youwen5/zen-browser-flake"; url = "github:youwen5/zen-browser-flake";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
@@ -88,33 +83,42 @@
]; ];
}; };
homeConfigurations = let homeConfigurations = {
extraSpecialArgs = {inherit inputs outputs system;};
pkgs = nixpkgs.legacyPackages.x86_64-linux;
in {
"phundrak@alys" = home-manager.lib.homeManagerConfiguration { "phundrak@alys" = home-manager.lib.homeManagerConfiguration {
inherit extraSpecialArgs pkgs; pkgs = nixpkgs.legacyPackages.x86_64-linux;
extraSpecialArgs = {
inherit inputs outputs;
};
modules = [ modules = [
./users/phundrak/host/alys.nix ./users/phundrak/host/alys.nix
inputs.sops-nix.homeManagerModules.sops inputs.sops-nix.homeManagerModules.sops
]; ];
}; };
"phundrak@marpa" = home-manager.lib.homeManagerConfiguration { "phundrak@marpa" = home-manager.lib.homeManagerConfiguration {
inherit extraSpecialArgs pkgs; pkgs = nixpkgs.legacyPackages.x86_64-linux;
extraSpecialArgs = {
inherit inputs outputs;
};
modules = [ modules = [
./users/phundrak/host/marpa.nix ./users/phundrak/host/marpa.nix
inputs.sops-nix.homeManagerModules.sops inputs.sops-nix.homeManagerModules.sops
]; ];
}; };
"phundrak@gampo" = home-manager.lib.homeManagerConfiguration { "phundrak@gampo" = home-manager.lib.homeManagerConfiguration {
inherit extraSpecialArgs pkgs; pkgs = nixpkgs.legacyPackages.x86_64-linux;
extraSpecialArgs = {
inherit inputs outputs;
};
modules = [ modules = [
./users/phundrak/host/gampo.nix ./users/phundrak/host/gampo.nix
inputs.sops-nix.homeManagerModules.sops inputs.sops-nix.homeManagerModules.sops
]; ];
}; };
"phundrak@tilo" = home-manager.lib.homeManagerConfiguration { "phundrak@tilo" = home-manager.lib.homeManagerConfiguration {
inherit extraSpecialArgs pkgs; pkgs = nixpkgs.legacyPackages.x86_64-linux;
extraSpecialArgs = {
inherit inputs outputs;
};
modules = [ modules = [
./users/phundrak/host/tilo.nix ./users/phundrak/host/tilo.nix
inputs.sops-nix.homeManagerModules.sops inputs.sops-nix.homeManagerModules.sops
@@ -122,39 +126,30 @@
}; };
}; };
nixosConfigurations = let nixosConfigurations = {
specialArgs = {inherit inputs outputs;};
in {
alys = nixpkgs.lib.nixosSystem { alys = nixpkgs.lib.nixosSystem {
inherit specialArgs; specialArgs = {inherit inputs outputs;};
modules = [ modules = [
./hosts/alys/configuration.nix ./hosts/alys/configuration.nix
inputs.sops-nix.nixosModules.sops inputs.sops-nix.nixosModules.sops
]; ];
}; };
elcafe = nixpkgs.lib.nixosSystem {
inherit specialArgs;
modules = [
./hosts/elcafe/configuration.nix
inputs.sops-nix.nixosModules.sops
];
};
gampo = nixpkgs.lib.nixosSystem { gampo = nixpkgs.lib.nixosSystem {
inherit specialArgs; specialArgs = {inherit inputs outputs;};
modules = [ modules = [
./hosts/gampo/configuration.nix ./hosts/gampo/configuration.nix
inputs.sops-nix.nixosModules.sops inputs.sops-nix.nixosModules.sops
]; ];
}; };
marpa = nixpkgs.lib.nixosSystem { marpa = nixpkgs.lib.nixosSystem {
inherit specialArgs; specialArgs = {inherit inputs outputs;};
modules = [ modules = [
./hosts/marpa/configuration.nix ./hosts/marpa/configuration.nix
inputs.sops-nix.nixosModules.sops inputs.sops-nix.nixosModules.sops
]; ];
}; };
tilo = nixpkgs.lib.nixosSystem { tilo = nixpkgs.lib.nixosSystem {
inherit specialArgs; specialArgs = {inherit inputs outputs;};
modules = [ modules = [
./hosts/tilo/configuration.nix ./hosts/tilo/configuration.nix
inputs.sops-nix.nixosModules.sops inputs.sops-nix.nixosModules.sops

View File

@@ -1,74 +0,0 @@
{
inputs,
config,
...
}: {
imports = [
./hardware-configuration.nix
inputs.home-manager.nixosModules.default
../../system
];
sops.secrets = {
"elcafe/traefik/env".restartUnits = ["traefik.service"];
"elcafe/traefik/dynamic".restartUnits = ["traefik.service"];
};
mySystem = {
boot = {
kernel = {
hardened = true;
cpuVendor = "intel";
};
zfs = {
enable = true;
pools = ["tank"];
};
};
dev.docker = {
enable = true;
extraDaemonSettings.data-root = "/tank/docker/";
};
misc.keymap = "fr";
networking = {
hostname = "elcafe";
id = "501c7fb9";
};
packages.nix = {
gc.automatic = true;
trusted-users = [
"root"
"phundrak"
];
};
services = {
endlessh.enable = true;
plex = {
enable = true;
dataDir = "/tank/web/plex-config";
};
ssh = {
enable = true;
allowedUsers = ["phundrak"];
passwordAuthentication = false;
};
traefik = {
enable = true;
envFiles = [config.sops.secrets."elcafe/traefik/env".path];
dynConf = config.sops.secrets."elcafe/traefik/dynamic".path;
};
};
users = {
root.disablePassword = true;
phundrak.enable = true;
};
};
# This value determines the NixOS release from which the default
# settings for stateful data, like file locations and database versions
# on your system were taken. Its perfectly fine and recommended to leave
# this value at the release version of the first install of this system.
# Before changing this value read the documentation for this option
# (e.g. man configuration.nix or on https://nixos.org/nixos/options.html).
system.stateVersion = "23.11"; # Did you read the comment?
}

View File

@@ -1,42 +0,0 @@
# Do not modify this file! It was generated by nixos-generate-config
# and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead.
{
config,
lib,
modulesPath,
...
}: {
imports = [
(modulesPath + "/installer/scan/not-detected.nix")
];
boot = {
initrd = {
availableKernelModules = ["ahci" "xhci_pci" "ehci_pci" "megaraid_sas" "usbhid" "usb_storage" "sd_mod" "sr_mod"];
kernelModules = [];
};
kernelModules = ["kvm-intel"];
extraModulePackages = [];
};
fileSystems."/" = {
device = "/dev/disk/by-uuid/d2e703f7-90e0-43e7-9872-ce036f201c4b";
fsType = "ext4";
};
swapDevices = [];
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
# (the default) this is the recommended approach. When using systemd-networkd it's
# still possible to use this option, but it's recommended to use it in conjunction
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
networking.useDHCP = lib.mkDefault true;
# networking.interfaces.eno1.useDHCP = lib.mkDefault true;
# networking.interfaces.eno2.useDHCP = lib.mkDefault true;
# networking.interfaces.eno3.useDHCP = lib.mkDefault true;
# networking.interfaces.eno4.useDHCP = lib.mkDefault true;
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
}

View File

@@ -21,19 +21,15 @@
desktop = { desktop = {
hyprland.enable = true; hyprland.enable = true;
niri.enable = true; niri.enable = true;
waydroid.enable = true;
xserver = { xserver = {
enable = true; enable = true;
de = "gnome"; de = "gnome";
}; };
}; };
dev = { dev.docker = {
docker = { enable = true;
enable = true; podman.enable = true;
podman.enable = true; autoprune.enable = true;
autoprune.enable = true;
};
qemu.enable = true;
}; };
hardware = { hardware = {
amdgpu.enable = true; amdgpu.enable = true;
@@ -76,7 +72,6 @@
enable = true; enable = true;
autostart = true; autostart = true;
}; };
languagetool.enable = true;
}; };
users = { users = {
root.disablePassword = true; root.disablePassword = true;

View File

@@ -1,7 +1,3 @@
elcafe:
traefik:
env: ENC[AES256_GCM,data:Mfm4Wt/7UWrpWGGa/rmC1wY6QtI2G/a6cbZiNjZz1gOTrREehFBZxH5JJ9ZgsxCMSuh/XCQa/75cPg==,iv:nrtTmtdFfTrCYzxFHDVMuaDdoa8SDi+pn4kghP4r9xE=,tag:gjlv8ohv1aDx2PB1rwx6fQ==,type:str]
dynamic: ENC[AES256_GCM,data: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,iv:Ooq6tK6nMGuRFJ1ElGCJhOMQVyMNtGBSguQVFSm71fA=,tag:iJviKci+i3tif+sH8UxRZg==,type:str]
extraHosts: ENC[AES256_GCM,data:YRHvHINgAQv4z+8awMzHY1uZS/K9qSaFsk8G5J2zF5P5YOt4x62eefXgmhWeKZzJI5AIi0312iMQl5qGv+lAkP+VC7j/h1rh7peBDEBU6LvcMgFU2XqxidM/CoKfMkJF8+/4bb+3r1LC/rEeXITTUQsOmoacdyCeKe5yxLaHyic/FaZIJq13wCg/QQSLfenc2Db0Pbxv5/cbRILhKT+ssElVipA40aZpgL7QmD542vObSEa6K4fZd0rawF/nOyibfpPN7Ak8DrYvfygNMw/QAGKY2XosxC86tjxhrIBHRakqmWpV+smoUO6XBFjU2sbwalafYVFdrvYL9BVAPtMZ25Sc5QMm87RCHqzqYdQHKs8C3JpVBHWnyL+0e5DNQrFrml0/FD5nFYsT6zDKVb/rN3YmxvTvKl7FpPKpv3Kke9WG+HnPs90hPy8Jpmg52vLMhaybx6dpJxzcF+ctBSI3J78hfweOCGvNGshCKpME1dujMPctH/kfYcm2j/ixKLjl0ZSbYeI9+l9oURBDwKzmKjAqhwnjuo3sL++ZsRU5Ue1zz9gsxS40R9eYevbq7JiQPX331pY2du1SRoKOxvPpXsDqe+CY5pW2RgPszjEIuDxyoveZolXg/zjlk0Ic/cOxrbflp7bTfQCQqEC7YJ5tRmtctk2lRGQkOFIg9Tn8ReifFxfhDrPFzc8X5vZgH73aqZSd/OkVybI3vEILV5uas0fPL7AHAKnBmeDV3mBNvF8aoZhD5CG8iRd1otta/3AQ660QV8IDoauq8fySC8Kee5B3kG75sqHvwF4Gu6CpSChXkjpiIqVmW0PntJueVHifuGJYkvhkX/CTHK7xm1HhtANnGrk6cr2APjWk1vpOaCmjFNqKTOV9d1HjaNWYTz4AZ+Uq2Za3UzN3oZCtZb96,iv:Z64+4oR/AfSgA7oZ/NPDLOtcmcXO5B4OQIGjOEK1Pf4=,tag:0I/1gXnBH7u6HTbQUz5Fpw==,type:str] extraHosts: ENC[AES256_GCM,data:YRHvHINgAQv4z+8awMzHY1uZS/K9qSaFsk8G5J2zF5P5YOt4x62eefXgmhWeKZzJI5AIi0312iMQl5qGv+lAkP+VC7j/h1rh7peBDEBU6LvcMgFU2XqxidM/CoKfMkJF8+/4bb+3r1LC/rEeXITTUQsOmoacdyCeKe5yxLaHyic/FaZIJq13wCg/QQSLfenc2Db0Pbxv5/cbRILhKT+ssElVipA40aZpgL7QmD542vObSEa6K4fZd0rawF/nOyibfpPN7Ak8DrYvfygNMw/QAGKY2XosxC86tjxhrIBHRakqmWpV+smoUO6XBFjU2sbwalafYVFdrvYL9BVAPtMZ25Sc5QMm87RCHqzqYdQHKs8C3JpVBHWnyL+0e5DNQrFrml0/FD5nFYsT6zDKVb/rN3YmxvTvKl7FpPKpv3Kke9WG+HnPs90hPy8Jpmg52vLMhaybx6dpJxzcF+ctBSI3J78hfweOCGvNGshCKpME1dujMPctH/kfYcm2j/ixKLjl0ZSbYeI9+l9oURBDwKzmKjAqhwnjuo3sL++ZsRU5Ue1zz9gsxS40R9eYevbq7JiQPX331pY2du1SRoKOxvPpXsDqe+CY5pW2RgPszjEIuDxyoveZolXg/zjlk0Ic/cOxrbflp7bTfQCQqEC7YJ5tRmtctk2lRGQkOFIg9Tn8ReifFxfhDrPFzc8X5vZgH73aqZSd/OkVybI3vEILV5uas0fPL7AHAKnBmeDV3mBNvF8aoZhD5CG8iRd1otta/3AQ660QV8IDoauq8fySC8Kee5B3kG75sqHvwF4Gu6CpSChXkjpiIqVmW0PntJueVHifuGJYkvhkX/CTHK7xm1HhtANnGrk6cr2APjWk1vpOaCmjFNqKTOV9d1HjaNWYTz4AZ+Uq2Za3UzN3oZCtZb96,iv:Z64+4oR/AfSgA7oZ/NPDLOtcmcXO5B4OQIGjOEK1Pf4=,tag:0I/1gXnBH7u6HTbQUz5Fpw==,type:str]
mopidy: mopidy:
spotify: ENC[AES256_GCM,data:SaDT0iSWhsgVOi1s+Nzbr0Mur3t2Zd9z/KIUshGWtbPfkXXIoiJeJFtoZIz5NL/t5FooYsNfU1mGYgDeVYSD4BPibW8hiCYrX6L6OX+Q6ZEWXXx/1eBEs2/q0BrWGvy7frcurq/Px4R3ax0dXJe/YKbpAtU7+bQl,iv:F2zT+uMVBMnSEZqgcRmV8/fc3G/g2fKDuHuBzkyBRN0=,tag:CD8fuOQfe6QCrj4BUh0/xw==,type:str] spotify: ENC[AES256_GCM,data:SaDT0iSWhsgVOi1s+Nzbr0Mur3t2Zd9z/KIUshGWtbPfkXXIoiJeJFtoZIz5NL/t5FooYsNfU1mGYgDeVYSD4BPibW8hiCYrX6L6OX+Q6ZEWXXx/1eBEs2/q0BrWGvy7frcurq/Px4R3ax0dXJe/YKbpAtU7+bQl,iv:F2zT+uMVBMnSEZqgcRmV8/fc3G/g2fKDuHuBzkyBRN0=,tag:CD8fuOQfe6QCrj4BUh0/xw==,type:str]
@@ -65,7 +61,7 @@ sops:
QmJKNDJUY0RSakhwNWlkOVpib0trc1kK0tQxD9I82pjfs54eruu+IjzVUmcVBCPw QmJKNDJUY0RSakhwNWlkOVpib0trc1kK0tQxD9I82pjfs54eruu+IjzVUmcVBCPw
9mp1xKiYRRMXt3YQn6MPiyuuX3l3UB5MH0RJMNtRq0D961rs+iiS5A== 9mp1xKiYRRMXt3YQn6MPiyuuX3l3UB5MH0RJMNtRq0D961rs+iiS5A==
-----END AGE ENCRYPTED FILE----- -----END AGE ENCRYPTED FILE-----
lastmodified: "2025-11-02T00:42:02Z" lastmodified: "2025-08-07T09:16:46Z"
mac: ENC[AES256_GCM,data:0rYURFETR06JRNY/vE89jEI+dovFNxsjSOalf1Id3H+yzl4UYdsHN1T3mD1EfssFwCloBxOo+188RkUe7JlNV7hC+tvO3nBrDNuqjzFBQu/IHEz+nTI3mwB7ZsywubvFMG65dohM8H9hB2bUXSSqtEUpFEiz7Ugn2BfGyex4BbI=,iv:vFJk6mz60d6CzSetd+bNvxTEWfGBPaBS4sYj/AiYbq4=,tag:2nHBGQ5P3mxLyzllvstBqg==,type:str] mac: ENC[AES256_GCM,data:3PIJps2hoavPJ6ig+943FE73lBhCfxv8vuzmgTtooH386V12/PQN+Opt/ZoIbXU9w21XelZ/C5xPr8rcuw5ADx9K/KjdMm8jyLCO6/+iBf6SjnbC3E0DyiDit50UtWxKc32ryiJ8m5hYfX6O2H8WIGFa+6wp5KISV9pkc09CNZA=,iv:xzwEhhBJQOlde8Ib+tZpv+2CHfR83dFevdwERkYTsTE=,tag:SzdcZH19kSTnNs16754IMw==,type:str]
unencrypted_suffix: _unencrypted unencrypted_suffix: _unencrypted
version: 3.11.0 version: 3.10.2

View File

@@ -1,8 +1,3 @@
{ {
imports = [ imports = [./hyprland.nix ./niri.nix ./xserver.nix];
./hyprland.nix
./niri.nix
./waydroid.nix
./xserver.nix
];
} }

View File

@@ -1,15 +0,0 @@
{
config,
lib,
pkgs,
...
}:
with lib; let
cfg = config.mySystem.desktop.waydroid;
in {
options.mySystem.desktop.waydroid.enable = mkEnableOption "Enables Waydroid";
config = mkIf cfg.enable {
virtualisation.waydroid.enable = cfg.enable;
environment.systemPackages = [pkgs.waydroid-helper];
};
}

View File

@@ -1,3 +1,3 @@
{ {
imports = [./docker.nix ./qemu.nix]; imports = [./docker.nix];
} }

View File

@@ -1,7 +1,6 @@
{ {
lib, lib,
config, config,
pkgs,
... ...
}: }:
with lib; let with lib; let
@@ -9,25 +8,14 @@ with lib; let
in { in {
options.mySystem.dev.docker = { options.mySystem.dev.docker = {
enable = mkEnableOption "Enable Docker"; enable = mkEnableOption "Enable Docker";
extraDaemonSettings = mkOption {
type = types.nullOr (types.attrsOf types.str);
default = {};
example = {
data-root = "/custom/path";
};
};
podman.enable = mkEnableOption "Enable Podman rather than Docker"; podman.enable = mkEnableOption "Enable Podman rather than Docker";
nvidia.enable = mkEnableOption "Activate Nvidia support"; nvidia.enable = mkEnableOption "Activate Nvidia support";
autoprune.enable = mkEnableOption "Enable autoprune"; autoprune.enable = mkEnableOption "Enable autoprune";
}; };
config = { config = {
environment.systemPackages = mkIf cfg.podman.enable [ virtualisation = {
pkgs.podman-desktop docker = mkIf (cfg.enable && !cfg.podman.enable) {
pkgs.podman-compose
];
virtualisation = mkIf cfg.enable {
docker = mkIf (!cfg.podman.enable) {
enable = true; enable = true;
enableNvidia = cfg.nvidia.enable; enableNvidia = cfg.nvidia.enable;
autoPrune.enable = cfg.autoprune.enable; autoPrune.enable = cfg.autoprune.enable;

View File

@@ -1,33 +0,0 @@
{
config,
lib,
pkgs,
...
}:
with lib; let
cfg = config.mySystem.dev.qemu;
in {
options.mySystem.dev.qemu = {
enable = mkEnableOption "Enable QEMU";
users = mkOption {
type = types.listOf types.str;
default = ["phundrak"];
example = ["user1" "user2"];
};
};
config = mkIf cfg.enable {
programs.virt-manager.enable = true;
users.groups.libvirtd.members = cfg.users;
virtualisation = {
libvirtd.enable = true;
spiceUSBRedirection.enable = true;
};
environment.systemPackages = with pkgs; [
qemu
quickemu
swtpm
];
systemd.tmpfiles.rules = ["L+ /var/lib/qemu/firmware - - - - ${pkgs.qemu}/share/qemu/firmware"];
boot.binfmt.emulatedSystems = ["aarch64-linux"];
};
}

View File

@@ -9,54 +9,14 @@ with lib; let
in { in {
options.mySystem.hardware.amdgpu.enable = mkEnableOption "Enables an AMD GPU configuration"; options.mySystem.hardware.amdgpu.enable = mkEnableOption "Enables an AMD GPU configuration";
config = mkIf cfg.enable { config = mkIf cfg.enable {
hardware = { systemd.tmpfiles.rules = [
graphics = { "L+ /opt/rocm/hip - - - - ${pkgs.rocmPackages.clr}"
enable = true; ];
enable32Bit = true; hardware.graphics.extraPackages = with pkgs; [rocmPackages.clr.icd];
extraPackages = with pkgs; [
mesa # Mesa drivers for AMD GPUs
rocmPackages.clr # common language runtime for ROCm
rocmPackages.clr.icd # ROCm ICD for OpenCL
rocmPackages.rocblas # ROCm BLAS library
rocmPackages.hipblas #
rocmPackages.rpp # High-performance computer vision library
nvtopPackages.amd # GPU utilization monitoring
];
};
amdgpu = {
initrd.enable = true;
opencl.enable = true;
};
};
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
clinfo clinfo
amdgpu_top amdgpu_top
nvtopPackages.amd nvtopPackages.amd
]; ];
systemd = {
packages = with pkgs; [lact];
services.lactd.wantedBy = ["multi-user.target"];
tmpfiles.rules = let
rocmEnv = pkgs.symlinkJoin {
name = "rocm-combined";
paths = with pkgs.rocmPackages; [
clr
clr.icd
rocblas
hipblas
rpp
];
};
in [
"L+ /opt/rocm - - - - ${rocmEnv}"
];
};
environment.variables = {
ROCM_PATH = "/opt/rocm"; # Set ROCm path
HIP_VISIBLE_DEVICES = "1"; # Use only the eGPU (ID 1)
ROCM_VISIBLE_DEVICES = "1"; # Optional: ROCm equivalent for visibility
# LD_LIBRARY_PATH = "/opt/rocm/lib"; # Add ROCm libraries
HSA_OVERRIDE_GFX_VERSION = "10.3.0"; # Set GFX version override
};
}; };
} }

View File

@@ -1,4 +1,3 @@
{lib, ...}:
{ {
imports = [ imports = [
./amdgpu.nix ./amdgpu.nix
@@ -8,5 +7,4 @@
./opentablet.nix ./opentablet.nix
./sound.nix ./sound.nix
]; ];
hardware.enableRedistributableFirmware = lib.mkDefault true;
} }

View File

@@ -1,16 +1,5 @@
{ {
lib, services.tailscale = {
config, enable = true;
...
}:
with lib; let
cfg = config.mySystem.network.tailscale;
in {
options.mySystem.network.tailscale = {
enable = mkOption {
type = types.bool;
default = true;
};
}; };
config.services.tailscale.enable = cfg.enable;
} }

View File

@@ -9,26 +9,26 @@ in {
options.mySystem.services.calibre = { options.mySystem.services.calibre = {
enable = mkEnableOption "Enable Calibre Web"; enable = mkEnableOption "Enable Calibre Web";
user = mkOption { user = mkOption {
type = types.str; type = types.string;
default = "phundrak"; default = "phundrak";
}; };
group = mkOption { group = mkOption {
type = types.str; type = types.string;
default = "users"; default = "users";
}; };
dataDir = mkOption { dataDir = mkOption {
type = types.str; type = types.string;
example = "/tank/calibre/conf"; example = "/tank/calibre/conf";
default = "/tank/calibre/conf"; default = "/tank/calibre/conf";
}; };
library = mkOption { library = mkOption {
type = types.str; type = types.string;
example = "/tank/calibre/library"; example = "/tank/calibre/library";
default = "/tank/calibre/library"; default = "/tank/calibre/library";
}; };
}; };
config.services.calibre-web = mkIf cfg.enable { config.services.calibre-web = mkIf cfg.enable {
inherit (cfg) enable user dataDir group; inherit (cfg) enable user group dataDir;
options = { options = {
calibreLibrary = cfg.library; calibreLibrary = cfg.library;
enableBookConversion = true; enableBookConversion = true;

View File

@@ -4,11 +4,9 @@
./endlessh.nix ./endlessh.nix
./fwupd.nix ./fwupd.nix
./jellyfin.nix ./jellyfin.nix
./languagetool.nix
./plex.nix ./plex.nix
./printing.nix ./printing.nix
./ssh.nix ./ssh.nix
./sunshine.nix ./sunshine.nix
./traefik.nix
]; ];
} }

View File

@@ -9,16 +9,16 @@ in {
options.mySystem.services.jellyfin = { options.mySystem.services.jellyfin = {
enable = mkEnableOption "Enable Jellyfin"; enable = mkEnableOption "Enable Jellyfin";
dataDir = mkOption { dataDir = mkOption {
type = types.str; type = types.string;
default = "/tank/jellyfin/data"; default = "/tank/jellyfin/data";
example = "/tank/jellyfin/data"; example = "/tank/jellyfin/data";
}; };
user = mkOption { user = mkOption {
type = types.str; type = types.string;
default = "phundrak"; default = "phundrak";
}; };
group = mkOption { group = mkOption {
type = types.str; type = types.string;
default = "users"; default = "users";
}; };
}; };

View File

@@ -1,20 +0,0 @@
{
config,
lib,
...
}:
with lib; let
cfg = config.mySystem.services.languagetool;
in {
options.mySystem.services.languagetool = {
enable = mkEnableOption "Enables languagetool";
port = mkOption {
type = types.port;
default = 8081;
example = 80;
};
};
config.services.languagetool = mkIf cfg.enable {
inherit (cfg) enable port;
};
}

View File

@@ -9,17 +9,17 @@ in {
options.mySystem.services.plex = { options.mySystem.services.plex = {
enable = mkEnableOption "Enable Plex"; enable = mkEnableOption "Enable Plex";
group = mkOption { group = mkOption {
type = types.str; type = types.string;
default = "users"; default = "users";
example = "users"; example = "users";
description = "Group under which Plex runs"; description = "Group under which Plex runs";
}; };
dataDir = mkOption { dataDir = mkOption {
type = types.str; type = types.string;
example = "/tank/plex-config"; example = "/tank/plex-config";
}; };
user = mkOption { user = mkOption {
type = types.str; type = types.string;
default = "phundrak"; default = "phundrak";
}; };
}; };

View File

@@ -1,65 +0,0 @@
{
config,
lib,
...
}:
with lib; let
cfg = config.mySystem.services.traefik;
in {
options.mySystem.services.traefik = {
enable = mkEnableOption "Enable Traefikse";
email = mkOption {
type = types.str;
default = "lucien@phundrak.com";
example = "admin@example.com";
};
envFiles = mkOption {
type = types.listOf types.path;
example = ["/run/secrets/traefik.env"];
default = [];
};
dynConf = mkOption {
type = types.path;
example = "/var/traefik/dynamic.yaml";
};
};
config = mkIf cfg.enable {
networking.firewall.allowedTCPPorts = [80 443];
services.traefik = {
inherit (cfg) enable;
environmentFiles = cfg.envFiles;
dynamicConfigFile = cfg.dynConf;
staticConfigOptions = {
log = {
level = "WARN";
filePath = "/var/log/traefik/traefik.log";
};
accessLog.filePath = "/var/log/traefik/access.log";
api.dashboard = true;
entryPoints = {
web = {
address = ":80";
http.redirections.entryPoint = {
to = "websecure";
scheme = "https";
};
};
websecure.address = ":443";
};
certificatesResolvers.cloudflare.acme = {
inherit (cfg) email;
storage = "/var/lib/traefik/acme.json";
dnsChallenge = {
provider = "cloudflare";
resolvers = ["1.1.1.1:53" "1.0.0.1:53"];
propagation.delayBeforeChecks = 60;
};
};
providers.docker = {
endpoint = "unix:///var/run/docker.sock";
exposedByDefault = false;
};
};
};
};
}

View File

@@ -19,6 +19,7 @@ in {
extraPackages = mkIf cfg.extras (with pkgs.bat-extras; [ extraPackages = mkIf cfg.extras (with pkgs.bat-extras; [
batman batman
batpipe batpipe
batgrep
]); ]);
}; };
} }

View File

@@ -20,6 +20,7 @@ in {
emacsPkg = mkOption { emacsPkg = mkOption {
type = types.package; type = types.package;
default = config.home.dev.editors.emacs.package or pkgs.emacs; default = config.home.dev.editors.emacs.package or pkgs.emacs;
# default = pkgs.emacs;
example = pkgs.emacs; example = pkgs.emacs;
}; };
host = mkOption { host = mkOption {
@@ -62,8 +63,6 @@ in {
"marpa" = [ "marpa" = [
"DP-1, 3440x1440@144, 1080x550, 1" "DP-1, 3440x1440@144, 1080x550, 1"
"DP-2, 2560x1080@60, 0x0, 1, transform, 1" "DP-2, 2560x1080@60, 0x0, 1, transform, 1"
# "DP-2, 1366x768@60, 0x0, 1"
# "DP-2, 1829x1143@60, 0x0, 1"
]; ];
"gampo" = []; "gampo" = [];
}."${cfg.host}"; }."${cfg.host}";
@@ -273,13 +272,19 @@ in {
}; };
services = { services = {
blueman-applet.enable = true; blueman-applet.enable = true;
hyprpaper = { wpaperd = {
enable = true; enable = true;
settings = { settings = {
ipc = "on"; default = {
splash = false; path = "/home/phundrak/Pictures/Wallpapers/nord";
preload = "/home/phundrak/Pictures/Wallpapers/nord/Nordic6.jpg"; duration = "5m";
wallpaper = ", /home/phundrak/Pictures/Wallpapers/nord/Nordic6.jpg"; sorting = "random";
mode = "center";
recursive = true;
};
DP-3 = {
mode = "fit-border-color";
};
}; };
}; };
}; };

View File

@@ -1,18 +0,0 @@
{
config,
lib,
inputs,
system,
...
}:
with lib; let
cfg = config.home.dev.ai.claude;
in {
options.home.dev.ai.claude.enable = mkEnableOption "Enables Claude-related packages";
config = mkIf cfg.enable {
home.packages = [inputs.claude-desktop.packages.${system}.claude-desktop-with-fhs];
programs.claude-code = {
inherit (cfg) enable;
};
};
}

View File

@@ -1,19 +0,0 @@
{
config,
lib,
...
}:
with lib; let
cfg = config.home.dev.ai;
in {
imports = [
./ollama.nix
./claude.nix
];
options.home.dev.ai.enable = mkEnableOption "Enables AI features";
config.home.dev.ai = mkIf cfg.enable {
ollama.enable = mkDefault cfg.enable;
claude.enable = mkDefault cfg.enable;
};
}

View File

@@ -7,8 +7,8 @@ with lib; let
cfg = config.home.dev; cfg = config.home.dev;
in { in {
imports = [ imports = [
./ai
./editors ./editors
./ollama.nix
./vcs ./vcs
]; ];

View File

@@ -5,7 +5,7 @@
... ...
}: }:
with lib; let with lib; let
emacsDefaultPackage = with pkgs; ((emacsPackagesFor emacs).emacsWithPackages ( emacsDefaultPackage = with pkgs; ((emacsPackagesFor emacsNativeComp).emacsWithPackages (
epkgs: [ epkgs: [
epkgs.mu4e epkgs.mu4e
epkgs.pdf-tools epkgs.pdf-tools

View File

@@ -4,21 +4,20 @@
... ...
}: }:
with lib; let with lib; let
cfg = config.home.dev.ai.ollama; cfg = config.home.dev.ollama;
in { in {
options.home.dev.ai.ollama = { options.home.dev.ollama = {
enable = mkEnableOption "Enables Ollama"; enable = mkEnableOption "Enables Ollama";
gpu = mkOption { gpu = mkOption {
type = types.nullOr (types.enum [false "rocm" "cuda"]); type = types.nullOr types.enum ["none" "amd" "nvidia"];
example = "rocm"; example = "amd";
default = null; default = "none";
description = "Which type of GPU should be used for hardware acceleration"; description = "Which type of GPU should be used for hardware acceleration";
}; };
}; };
config.services.ollama = mkIf cfg.enable { config.services.ollama = mkIf cfg.enable {
inherit (cfg) enable; inherit (cfg) enable;
acceleration = cfg.gpu;
environmentVariables = { environmentVariables = {
OLLAMA_CONTEXT_LENGTH = "8192"; OLLAMA_CONTEXT_LENGTH = "8192";
}; };

View File

@@ -90,47 +90,9 @@ in {
else cfg.sendmail.user; else cfg.sendmail.user;
in { in {
enable = true; enable = true;
ignores = [ userEmail = cfg.email;
".env" userName = cfg.name;
".direnv/" extraConfig = {
"*~"
"\#*\#"
"*.elc"
"auto-save-list"
".\#*"
"*_flymake.*"
"/auto/"
".projectile"
".dir-locals.el"
"# Org mode files"
".org-id-locations"
"*_archive"
"*.out"
"*.o"
"*.so"
"# Archives"
"*.7zz"
"*.dmg"
"*.gz"
"*.iso"
"*.jar"
"*.rar"
"*.tar"
"*.zip"
"*.log"
"*.sqlite"
"dist/"
];
settings = {
user = {
inherit (cfg) name email;
};
color.ui = "auto"; color.ui = "auto";
column.ui = "auto"; column.ui = "auto";
tag.sort = "version:refname"; tag.sort = "version:refname";
@@ -218,62 +180,99 @@ in {
insteadOf = "labs:"; insteadOf = "labs:";
}; };
}; };
alias = { };
a = "add --all"; ignores = [
aca = "!git add --all && git commit --amend"; ".env"
acan = "!git add --all && git commit --amend --no-edit"; ".direnv/"
ap = "add --patch";
b = "branch"; "*~"
bd = "branch -d"; "\#*\#"
bdd = "branch -D"; "*.elc"
c = "commit -S"; "auto-save-list"
ca = "commit -Sa"; ".\#*"
can = "commit -Sa --no-edit"; "*_flymake.*"
cm = "commit -Sm"; "/auto/"
cam = "commit -Sam"; ".projectile"
co = "checkout"; ".dir-locals.el"
cob = "checkout -b";
cod = "checkout develop"; "# Org mode files"
cl = "clone"; ".org-id-locations"
cl1 = "clone --depth 1"; "*_archive"
f = "fetch";
fp = "fetch --prune"; "*.out"
ps = "push"; "*.o"
psf = "push --force-with-lease"; "*.so"
pso = "push origin";
psfo = "push --force-with-lease origin"; "# Archives"
pushall = "!git remote \vert{} xargs -L1 git push"; "*.7zz"
psl = "!git remote \vert{} xargs -L1 git push"; "*.dmg"
pullall = "!git remote \vert{} xargs -L1 git pull"; "*.gz"
pll = "!git remote \vert{} xargs -L1 git pull"; "*.iso"
pl = "pull"; "*.jar"
pb = "pull --rebase"; "*.rar"
r = "rebase"; "*.tar"
ra = "rebase --abort"; "*.zip"
rc = "rebase --continue";
rd = "rebase develop"; "*.log"
ri = "rebase -i"; "*.sqlite"
rmf = "rm -f";
rmd = "rm -r"; "dist/"
rmdf = "rm -rf"; ];
sm = "submodule"; aliases = {
sms = "submodule status"; a = "add --all";
sma = "submodule add"; aca = "!git add --all && git commit --amend";
smu = "submodule update"; acan = "!git add --all && git commit --amend --no-edit";
smui = "submodule update --init"; ap = "add --patch";
smuir = "submodule update --init --recursive"; b = "branch";
st = "stash"; bd = "branch -d";
stc = "stash clear"; bdd = "branch -D";
stp = "stash pop"; c = "commit -S";
stw = "stash show"; ca = "commit -Sa";
u = "reset --"; can = "commit -Sa --no-edit";
d = "diff -w"; cm = "commit -Sm";
l = "log --all --oneline --graph --decorate --pretty=format':%C(magenta)%h %C(white) %an %ar%C(auto) %D%n%s%n'"; cam = "commit -Sam";
s = "status"; co = "checkout";
staged = "diff --cached"; cob = "checkout -b";
upstream = "!git push -u origin HEAD"; cod = "checkout develop";
unstage = "reset --"; cl = "clone";
}; cl1 = "clone --depth 1";
f = "fetch";
fp = "fetch --prune";
ps = "push";
psf = "push --force-with-lease";
pso = "push origin";
psfo = "push --force-with-lease origin";
pushall = "!git remote \vert{} xargs -L1 git push";
psl = "!git remote \vert{} xargs -L1 git push";
pullall = "!git remote \vert{} xargs -L1 git pull";
pll = "!git remote \vert{} xargs -L1 git pull";
pl = "pull";
pb = "pull --rebase";
r = "rebase";
ra = "rebase --abort";
rc = "rebase --continue";
rd = "rebase develop";
ri = "rebase -i";
rmf = "rm -f";
rmd = "rm -r";
rmdf = "rm -rf";
sm = "submodule";
sms = "submodule status";
sma = "submodule add";
smu = "submodule update";
smui = "submodule update --init";
smuir = "submodule update --init --recursive";
st = "stash";
stc = "stash clear";
stp = "stash pop";
stw = "stash show";
u = "reset --";
d = "diff -w";
l = "log --all --oneline --graph --decorate --pretty=format':%C(magenta)%h %C(white) %an %ar%C(auto) %D%n%s%n'";
s = "status";
staged = "diff --cached";
upstream = "!git push -u origin HEAD";
unstage = "reset --";
}; };
}; };
}; };

View File

@@ -45,9 +45,6 @@ in {
default-command = "st"; default-command = "st";
pager = ":builtin"; pager = ":builtin";
show-cryptographic-signatures = true; show-cryptographic-signatures = true;
conflict-marker-style = "git"; # Support for vc-jj.el
diff-formatter = ":git"; # Support for vc-jj.el
diff-editor = ":builtin";
inherit (cfg) editor; inherit (cfg) editor;
}; };
signing = mkIf cfg.signing.enable { signing = mkIf cfg.signing.enable {

View File

@@ -17,7 +17,6 @@ in {
config = { config = {
programs.ssh = mkIf cfg.enable { programs.ssh = mkIf cfg.enable {
enable = true; enable = true;
enableDefaultConfig = false;
includes = lists.optional (cfg.hosts != null) cfg.hosts; includes = lists.optional (cfg.hosts != null) cfg.hosts;
}; };
}; };

View File

@@ -11,7 +11,7 @@
]; ];
config = let config = let
emacsPkg = with pkgs; ((emacsPackagesFor emacs).emacsWithPackages ( emacsPkg = with pkgs; ((emacsPackagesFor emacsNativeComp).emacsWithPackages (
epkgs: [ epkgs: [
epkgs.mu4e epkgs.mu4e
epkgs.pdf-tools epkgs.pdf-tools
@@ -37,7 +37,10 @@
}; };
desktop.waybar.style = ./config/waybar/style.css; desktop.waybar.style = ./config/waybar/style.css;
dev.ai.claude.enable = true; dev.ollama = {
enable = true;
gpu = "amd";
};
fullDesktop = true; fullDesktop = true;
shell.fish.enable = true; shell.fish.enable = true;
}; };

View File

@@ -2,10 +2,6 @@
imports = [../home.nix]; imports = [../home.nix];
home = { home = {
cli.nh.flake = "${config.home.homeDirectory}/.dotfiles"; cli.nh.flake = "${config.home.homeDirectory}/.dotfiles";
dev.ai.ollama = {
enable = true;
gpu = "rocm";
};
desktop.hyprland.host = "marpa"; desktop.hyprland.host = "marpa";
phundrak.sshKey = { phundrak.sshKey = {
content = builtins.readFile ../../../keys/id_marpa.pub; content = builtins.readFile ../../../keys/id_marpa.pub;

View File

@@ -36,11 +36,11 @@ with lib; {
signal-desktop-bin signal-desktop-bin
# Misc # Misc
bitwarden-desktop bitwarden
gplates gplates
libnotify libnotify
nextcloud-client nextcloud-client
onlyoffice-desktopeditors onlyoffice-bin
scrcpy scrcpy
syncthing syncthing
watchmate watchmate
@@ -54,6 +54,7 @@ with lib; {
openmw openmw
openttd-jgrpp openttd-jgrpp
moonlight-qt moonlight-qt
modrinth-app
# Gnome stuff # Gnome stuff
gnome-tweaks gnome-tweaks
@@ -65,13 +66,18 @@ with lib; {
# Graphics # Graphics
inkscape inkscape
gimp gimp
gimpPlugins.gmic gimpPlugins.fourier
gimpPlugins.farbfeld
# Dev # Dev
devenv devenv
dive # A tool for exploring each layer in a docker image dive # A tool for exploring each layer in a docker image
grype # Vulnerability scanner for container images and filesystems grype # Vulnerability scanner for container images and filesystems
kicad # Working on my custom keyboard
podman-desktop
podman-compose
tectonic # better LaTeX engine tectonic # better LaTeX engine
virt-manager
zeal zeal
## LSP servers ## LSP servers