All my system configs and packages in one repo

lots of things

pluie.me 0b848851 8b3ab30b

verified
+364 -101
+1 -1
README.md
··· 1 - My Nix [flake](https://nixos.wiki/wiki/Flakes) containing all of my system configurations, userland settings, custom packages and more!
··· 1 + My Nix [flake](https://wiki.nixos.org/wiki/Flakes) containing all of my system configurations, userland settings, custom packages and more!
+4 -4
flake.lock
··· 241 }, 242 "nixpkgs": { 243 "locked": { 244 - "lastModified": 1748769915, 245 - "narHash": "sha256-fY+Pv/vF9bIzgmG+u56ZzqmP+ALLtcHLc9Xp+44FvZc=", 246 - "rev": "910796cabe436259a29a72e8d3f5e180fc6dfacc", 247 "type": "tarball", 248 - "url": "https://releases.nixos.org/nixos/unstable/nixos-25.11pre808478.910796cabe43/nixexprs.tar.xz" 249 }, 250 "original": { 251 "type": "tarball",
··· 241 }, 242 "nixpkgs": { 243 "locked": { 244 + "lastModified": 1751332518, 245 + "narHash": "sha256-BTVn9nIjhCeWpaxOs3Wbhwum4xID4p36dbmEfLDyh9Y=", 246 + "rev": "3016b4b15d13f3089db8a41ef937b13a9e33a8df", 247 "type": "tarball", 248 + "url": "https://releases.nixos.org/nixos/unstable/nixos-25.11pre823481.3016b4b15d13/nixexprs.tar.xz" 249 }, 250 "original": { 251 "type": "tarball",
+2 -3
modules/hjem-ctp/fish.nix
··· 18 }; 19 in 20 { 21 - options.ctp.fish = ctp-lib.mkCatppuccinOptions "Fish" {}; 22 23 config = lib.mkIf cfg.enable { 24 - files.".config/fish/themes/${themeName}.theme".source = 25 - "${src}/themes/${themeName}.theme"; 26 27 rum.programs.fish.earlyConfigFiles.ctp-fish = '' 28 fish_config theme choose "${themeName}"
··· 18 }; 19 in 20 { 21 + options.ctp.fish = ctp-lib.mkCatppuccinOptions "Fish" { }; 22 23 config = lib.mkIf cfg.enable { 24 + files.".config/fish/themes/${themeName}.theme".source = "${src}/themes/${themeName}.theme"; 25 26 rum.programs.fish.earlyConfigFiles.ctp-fish = '' 27 fish_config theme choose "${themeName}"
+1
modules/hjem-ext/default.nix
··· 5 ./programs/hyfetch.nix 6 ./programs/jujutsu.nix 7 ./programs/moar.nix 8 ./programs/vesktop.nix 9 ]; 10 }
··· 5 ./programs/hyfetch.nix 6 ./programs/jujutsu.nix 7 ./programs/moar.nix 8 + ./programs/swaylock.nix 9 ./programs/vesktop.nix 10 ]; 11 }
+3 -2
modules/hjem-ext/programs/git.nix
··· 23 24 config = lib.mkIf cfg.enable { 25 packages = [ cfg.package ]; 26 - files.".config/git/config".source = lib.mkIf (cfg.settings != { }) 27 - (format.generate "git-config" cfg.settings); 28 }; 29 }
··· 23 24 config = lib.mkIf cfg.enable { 25 packages = [ cfg.package ]; 26 + files.".config/git/config".source = lib.mkIf (cfg.settings != { }) ( 27 + format.generate "git-config" cfg.settings 28 + ); 29 }; 30 }
+3 -2
modules/hjem-ext/programs/jujutsu.nix
··· 23 24 config = lib.mkIf cfg.enable { 25 packages = [ cfg.package ]; 26 - files.".config/jj/config.toml".source = lib.mkIf (cfg.settings != { }) 27 - (format.generate "jj-config.toml" cfg.settings); 28 }; 29 }
··· 23 24 config = lib.mkIf cfg.enable { 25 packages = [ cfg.package ]; 26 + files.".config/jj/config.toml".source = lib.mkIf (cfg.settings != { }) ( 27 + format.generate "jj-config.toml" cfg.settings 28 + ); 29 }; 30 }
+17 -13
modules/hjem-ext/programs/moar.nix
··· 7 let 8 cfg = config.ext.programs.moar; 9 10 - toFlag = k: v: if lib.isBool v then 11 - lib.optionalString (v) "-${k}" 12 - else if lib.isString v then 13 - "-${k}=${v}" 14 - else 15 - throw "Unsupported type"; 16 - 17 in 18 { 19 options.ext.programs.moar = { 20 enable = lib.mkEnableOption "Moar"; 21 22 - package = lib.mkPackageOption pkgs "moar" {}; 23 24 settings = lib.mkOption { 25 type = lib.types.submodule { 26 - freeformType = with lib.types; attrsOf (oneOf [ 27 - str 28 - bool 29 - ]); 30 }; 31 - default = {}; 32 }; 33 }; 34
··· 7 let 8 cfg = config.ext.programs.moar; 9 10 + toFlag = 11 + k: v: 12 + if lib.isBool v then 13 + lib.optionalString (v) "-${k}" 14 + else if lib.isString v then 15 + "-${k}=${v}" 16 + else 17 + throw "Unsupported type"; 18 + 19 in 20 { 21 options.ext.programs.moar = { 22 enable = lib.mkEnableOption "Moar"; 23 24 + package = lib.mkPackageOption pkgs "moar" { }; 25 26 settings = lib.mkOption { 27 type = lib.types.submodule { 28 + freeformType = 29 + with lib.types; 30 + attrsOf (oneOf [ 31 + str 32 + bool 33 + ]); 34 }; 35 + default = { }; 36 }; 37 }; 38
+51
modules/hjem-ext/programs/swaylock.nix
···
··· 1 + { 2 + config, 3 + lib, 4 + pkgs, 5 + ... 6 + }: 7 + let 8 + cfg = config.ext.programs.swaylock; 9 + 10 + finalPackage = pkgs.writeShellApplication { 11 + name = "swaylock"; 12 + runtimeInputs = [ cfg.package ]; 13 + text = '' 14 + exec swaylock ${lib.cli.toGNUCommandLineShell { } cfg.settings} "$@" 15 + ''; 16 + }; 17 + in 18 + { 19 + options.ext.programs.swaylock = { 20 + enable = lib.mkEnableOption "Swaylock"; 21 + 22 + package = lib.mkPackageOption pkgs "swaylock" { }; 23 + 24 + finalPackage = lib.mkOption { 25 + type = lib.types.package; 26 + readOnly = true; 27 + default = finalPackage; 28 + description = '' 29 + The final package after all options have been applied. 30 + ''; 31 + }; 32 + 33 + settings = lib.mkOption { 34 + type = lib.types.submodule { 35 + freeformType = 36 + with lib.types; 37 + attrsOf (oneOf [ 38 + str 39 + bool 40 + int 41 + float 42 + ]); 43 + }; 44 + default = { }; 45 + }; 46 + }; 47 + 48 + config = lib.mkIf cfg.enable { 49 + packages = [ finalPackage ]; 50 + }; 51 + }
-1
packages/breezex-cursor/package.nix
··· 1 - 2 { 3 stdenvNoCC, 4 fetchFromGitHub,
··· 1 { 2 stdenvNoCC, 3 fetchFromGitHub,
+3 -1
packages/dm-sans-unstable/package.nix
··· 26 mkdir -p $out/share/fonts/{opentype,truetype,woff} 27 cp Sans/fonts/otf/*.otf $out/share/fonts/opentype 28 29 - cp Sans/fonts/ttf/${lib.optionalString (!enableSizeSpecialization) "DMSans-"}*.ttf $out/share/fonts/truetype 30 cp Sans/fonts/variable/*.ttf $out/share/fonts/truetype 31 ${lib.optionalString enableWebFonts ''cp Sans/fonts/webfonts/*.woff2 $out/share/fonts/woff''} 32
··· 26 mkdir -p $out/share/fonts/{opentype,truetype,woff} 27 cp Sans/fonts/otf/*.otf $out/share/fonts/opentype 28 29 + cp Sans/fonts/ttf/${ 30 + lib.optionalString (!enableSizeSpecialization) "DMSans-" 31 + }*.ttf $out/share/fonts/truetype 32 cp Sans/fonts/variable/*.ttf $out/share/fonts/truetype 33 ${lib.optionalString enableWebFonts ''cp Sans/fonts/webfonts/*.woff2 $out/share/fonts/woff''} 34
+31
packages/fontawesome-free/package.nix
···
··· 1 + { 2 + lib, 3 + stdenvNoCC, 4 + fetchzip, 5 + }: 6 + stdenvNoCC.mkDerivation (finalAttrs: { 7 + pname = "fontawesome-free"; 8 + version = "6.7.2"; 9 + 10 + src = fetchzip { 11 + url = "https://use.fontawesome.com/releases/v${finalAttrs.version}/fontawesome-free-${finalAttrs.version}-desktop.zip"; 12 + hash = "sha256-jkXTyVyK2OtHQTykMAjrov0cpj4Kktk/cn4bEMHi6tY="; 13 + }; 14 + 15 + dontConfigure = true; 16 + dontBuild = true; 17 + dontFixup = true; 18 + 19 + installPhase = '' 20 + runHook preInstall 21 + install -Dm644 otfs/*.otf -t $out/share/fonts/opentype 22 + install -Dm644 LICENSE.txt -t $out/share/doc/fontawesome 23 + runHook postInstall 24 + ''; 25 + 26 + meta = { 27 + description = "Font Awesome OpenType fonts (Free version)"; 28 + license = lib.licenses.ofl; 29 + platforms = lib.platforms.all; 30 + }; 31 + })
+3 -6
systems/common.nix
··· 31 "configurable-impure-env" 32 ]; 33 trusted-users = [ "@wheel" ]; 34 - # impure-env = [ "all_proxy=http://127.0.0.1:2080" ]; 35 }; 36 }; 37 ··· 41 allowUnfree = true; 42 cudaSupport = true; 43 }; 44 - 45 flake.setNixPath = true; 46 47 overlays = [ inputs.self.overlays.default ]; ··· 114 115 networking.networkmanager = { 116 enable = true; 117 - 118 - # Fuck wpa_supplicant 119 - wifi.backend = "iwd"; 120 }; 121 122 system = { ··· 132 # thanks to @getchoo 133 autoUpgrade = { 134 enable = true; 135 - flake = "github:pluiedev/flake#${config.networking.hostName}"; 136 flags = [ "--refresh" ]; 137 }; 138
··· 31 "configurable-impure-env" 32 ]; 33 trusted-users = [ "@wheel" ]; 34 + impure-env = [ "all_proxy=http://127.0.0.1:2080" ]; 35 }; 36 }; 37 ··· 41 allowUnfree = true; 42 cudaSupport = true; 43 }; 44 + 45 flake.setNixPath = true; 46 47 overlays = [ inputs.self.overlays.default ]; ··· 114 115 networking.networkmanager = { 116 enable = true; 117 }; 118 119 system = { ··· 129 # thanks to @getchoo 130 autoUpgrade = { 131 enable = true; 132 + flake = "git+https://tangled.sh/@pluie.me/flake#${config.networking.hostName}"; 133 flags = [ "--refresh" ]; 134 }; 135
+4 -4
systems/fettuccine/default.nix
··· 58 # cache.nixos.org is *unbearably* slow when accessed from Mainland China. 59 # Fortunately, mirror sites exist... Hooray(?) 60 nix.settings.substituters = map (url: "${url}/nix-channels/store") [ 61 - "https://mirrors.ustc.edu.cn" 62 - "https://mirrors6.tuna.tsinghua.edu.cn" 63 - "https://mirrors.tuna.tsinghua.edu.cn" 64 - # "https://mirror.sjtu.edu.cn" # FIXME: buggy? 65 ]; 66 }; 67 }
··· 58 # cache.nixos.org is *unbearably* slow when accessed from Mainland China. 59 # Fortunately, mirror sites exist... Hooray(?) 60 nix.settings.substituters = map (url: "${url}/nix-channels/store") [ 61 + "https://mirrors.ustc.edu.cn" 62 + "https://mirrors6.tuna.tsinghua.edu.cn" 63 + "https://mirrors.tuna.tsinghua.edu.cn" 64 + # "https://mirror.sjtu.edu.cn" # FIXME: buggy? 65 ]; 66 }; 67 }
+59 -6
systems/fettuccine/hardware-configuration.nix
··· 1 { 2 config, 3 lib, 4 modulesPath, 5 ... 6 }: ··· 16 "vmd" 17 "nvme" 18 "usbhid" 19 "sdhci_pci" 20 ]; 21 boot.initrd.kernelModules = [ ]; ··· 23 boot.extraModulePackages = [ ]; 24 25 fileSystems."/" = { 26 - device = "/dev/disk/by-uuid/cba5d724-0a83-4680-8f2f-cb11084fce72"; 27 - fsType = "ext4"; 28 }; 29 30 fileSystems."/boot" = { 31 - device = "/dev/disk/by-uuid/05D1-6882"; 32 fsType = "vfat"; 33 options = [ 34 "fmask=0022" ··· 36 ]; 37 }; 38 39 - swapDevices = [ 40 - { device = "/dev/disk/by-uuid/d3a01a34-de64-4f58-b29f-ae973cb3e8c2"; } 41 - ]; 42 43 # Enables DHCP on each ethernet and wireless interface. In case of scripted networking 44 # (the default) this is the recommended approach. When using systemd-networkd it's
··· 1 + # Do not modify this file! It was generated by ‘nixos-generate-config’ 2 + # and may be overwritten by future invocations. Please make changes 3 + # to /etc/nixos/configuration.nix instead. 4 { 5 config, 6 lib, 7 + pkgs, 8 modulesPath, 9 ... 10 }: ··· 20 "vmd" 21 "nvme" 22 "usbhid" 23 + "usb_storage" 24 + "sd_mod" 25 "sdhci_pci" 26 ]; 27 boot.initrd.kernelModules = [ ]; ··· 29 boot.extraModulePackages = [ ]; 30 31 fileSystems."/" = { 32 + device = "/dev/disk/by-uuid/c791e720-40c0-414a-aa36-0effa900c33d"; 33 + fsType = "btrfs"; 34 + options = [ 35 + "subvol=root" 36 + "compress=zstd" 37 + "noatime" 38 + ]; 39 + }; 40 + 41 + boot.initrd.luks.devices."enc".device = "/dev/disk/by-uuid/f9758e84-dadf-4cae-a654-a10d77520100"; 42 + 43 + fileSystems."/home" = { 44 + device = "/dev/disk/by-uuid/c791e720-40c0-414a-aa36-0effa900c33d"; 45 + fsType = "btrfs"; 46 + options = [ 47 + "subvol=home" 48 + "compress=zstd" 49 + "noatime" 50 + ]; 51 + }; 52 + 53 + fileSystems."/nix" = { 54 + device = "/dev/disk/by-uuid/c791e720-40c0-414a-aa36-0effa900c33d"; 55 + fsType = "btrfs"; 56 + options = [ 57 + "subvol=nix" 58 + "compress=zstd" 59 + "noatime" 60 + ]; 61 + }; 62 + 63 + fileSystems."/persist" = { 64 + device = "/dev/disk/by-uuid/c791e720-40c0-414a-aa36-0effa900c33d"; 65 + fsType = "btrfs"; 66 + options = [ 67 + "subvol=persist" 68 + "compress=zstd" 69 + "noatime" 70 + ]; 71 + neededForBoot = true; 72 + }; 73 + 74 + fileSystems."/var/log" = { 75 + device = "/dev/disk/by-uuid/c791e720-40c0-414a-aa36-0effa900c33d"; 76 + fsType = "btrfs"; 77 + options = [ 78 + "subvol=log" 79 + "compress=zstd" 80 + "noatime" 81 + ]; 82 + neededForBoot = true; 83 }; 84 85 fileSystems."/boot" = { 86 + device = "/dev/disk/by-uuid/7839-0EC5"; 87 fsType = "vfat"; 88 options = [ 89 "fmask=0022" ··· 91 ]; 92 }; 93 94 + swapDevices = [ ]; 95 96 # Enables DHCP on each ethernet and wireless interface. In case of scripted networking 97 # (the default) this is the recommended approach. When using systemd-networkd it's
+1
users/leah/appearance.nix
··· 74 i-dot-ming 75 lxgw-neoxihei 76 dm-sans-unstable 77 ]; 78 79 fontconfig = {
··· 74 i-dot-ming 75 lxgw-neoxihei 76 dm-sans-unstable 77 + fontawesome-free 78 ]; 79 80 fontconfig = {
+91 -7
users/leah/presets/niri/config.kdl
··· 17 workspace-auto-back-and-forth 18 } 19 20 output "eDP-1" { 21 - mode "2560x1600" 22 scale 1.25 23 - transform "normal" 24 variable-refresh-rate 25 } 26 27 layout { 28 gaps 24 29 center-focused-column "on-overflow" 30 always-center-single-column 31 32 preset-column-widths { 33 proportion 0.33333 ··· 35 proportion 0.66667 36 } 37 38 - default-column-width {} 39 40 focus-ring { 41 - width 1.5 42 active-color "#eba0ac" 43 - inactive-color "#505050" 44 } 45 46 shadow { ··· 50 offset x=0 y=5 51 color "#0007" 52 } 53 } 54 55 - screenshot-path "~/Pictures/Screenshots/Screenshot from %Y-%m-%d %H-%M-%S.png" 56 57 window-rule { 58 geometry-corner-radius 12 59 clip-to-geometry true 60 } 61 62 window-rule { 63 match app-id="com.mitchellh.ghostty" 64 draw-border-with-background false 65 } 66 ··· 243 244 // Workspaces & default apps 245 workspace "chat" 246 - workspace "dev" 247 workspace "gaming" 248 249 spawn-at-startup "waybar" ··· 251 spawn-at-startup "xwayland-satellite" 252 spawn-at-startup "fcitx5" 253 spawn-at-startup "swayidle" 254 // TODO: I do not know why 1Pass doesn't work on Wayland 255 spawn-at-startup "1password --ozone-platform-hint=x11" 256 spawn-at-startup "ghostty" 257 spawn-at-startup "firefox" 258 259 window-rule { 260 match at-startup=true app-id="vesktop" ··· 266 open-on-workspace "dev" 267 } 268 window-rule { 269 match app-id="steam" title=r#"^notificationtoasts_\d+_desktop$"# 270 default-floating-position x=10 y=10 relative-to="top-right" 271 }
··· 17 workspace-auto-back-and-forth 18 } 19 20 + // Place the monitors like so, in terms of logical coordinates: 21 + // 22 + // 0 2560 4608 23 + // v-----------------------v-------------------v 24 + // 2560 2560 / 1.25 = 2048 25 + // 0 > +-----------------------+ 26 + // | | +-------------------+ < 160 27 + // | | | | | 28 + // 1440 | | HDMI-A-1 | eDP-1 | | 1600 / 1.25 29 + // | | | (125%) | | = 1280 30 + // | | | | | 31 + // 1440 > +-----------------------+-------------------+ < 1440 32 + 33 output "eDP-1" { 34 + mode "2560x1600@165.040" 35 scale 1.25 36 variable-refresh-rate 37 + position x=2560 y=160 // 1440 - (1600 / 1.25) 38 + } 39 + 40 + output "HDMI-A-1" { 41 + mode "2560x1440@143.912" 42 + // Main monitor is to the left of the laptop monitor 43 + position x=0 y=0 44 } 45 46 layout { 47 gaps 24 48 center-focused-column "on-overflow" 49 always-center-single-column 50 + background-color "transparent" // Let backdrop shine through 51 52 preset-column-widths { 53 proportion 0.33333 ··· 55 proportion 0.66667 56 } 57 58 + default-column-width { 59 + proportion 0.6667 60 + } 61 62 focus-ring { 63 + width 2.5 64 active-color "#eba0ac" 65 + inactive-color "#00000000" 66 + } 67 + 68 + border { 69 + off 70 + width 2.5 71 + urgent-color "#f38ba8" 72 + } 73 + 74 + insert-hint { 75 + color "#eba0ac70" 76 } 77 78 shadow { ··· 82 offset x=0 y=5 83 color "#0007" 84 } 85 + 86 + struts { 87 + left -24 88 + right -24 89 + top -16 90 + bottom -16 91 + } 92 } 93 94 + overview { 95 + zoom 0.6667 96 + workspace-shadow { 97 + off 98 + } 99 + } 100 + 101 + screenshot-path "~/Pictures/Screenshots/screenshot-%Y-%m-%d-%H-%M-%S.png" 102 + 103 + // Swaybg 104 + layer-rule { 105 + match namespace="wallpaper" 106 + place-within-backdrop true 107 + } 108 + 109 + // Fuzzel 110 + layer-rule { 111 + match namespace="launcher" 112 + baba-is-float true 113 + shadow { 114 + on 115 + } 116 + } 117 118 window-rule { 119 geometry-corner-radius 12 120 clip-to-geometry true 121 } 122 123 + // Only enable borders for urgent windows 124 + window-rule { 125 + match is-urgent=true 126 + 127 + border { 128 + on 129 + } 130 + } 131 + 132 window-rule { 133 match app-id="com.mitchellh.ghostty" 134 + // Allow terminal background to be transparent 135 draw-border-with-background false 136 } 137 ··· 314 315 // Workspaces & default apps 316 workspace "chat" 317 + workspace "dev" { 318 + open-on-output "HDMI-A-1" 319 + } 320 workspace "gaming" 321 322 spawn-at-startup "waybar" ··· 324 spawn-at-startup "xwayland-satellite" 325 spawn-at-startup "fcitx5" 326 spawn-at-startup "swayidle" 327 + spawn-at-startup "swaybg" 328 + 329 // TODO: I do not know why 1Pass doesn't work on Wayland 330 spawn-at-startup "1password --ozone-platform-hint=x11" 331 spawn-at-startup "ghostty" 332 spawn-at-startup "firefox" 333 + spawn-at-startup "vesktop" 334 + spawn-at-startup "steam" 335 336 window-rule { 337 match at-startup=true app-id="vesktop" ··· 343 open-on-workspace "dev" 344 } 345 window-rule { 346 + match at-startup=true app-id="steam" 347 + match app-id=r#"^steam_app_"# 348 + open-on-workspace "gaming" 349 + } 350 + window-rule { 351 match app-id="steam" title=r#"^notificationtoasts_\d+_desktop$"# 352 default-floating-position x=10 y=10 relative-to="top-right" 353 + // Never allow notifications steal focus 354 + open-focused false 355 }
-1
users/leah/presets/niri/default.nix
··· 21 waybar 22 xwayland-satellite 23 brightnessctl 24 - swaylock-effects 25 ]; 26 27 files.".config/niri/config.kdl".source = ./config.kdl;
··· 21 waybar 22 xwayland-satellite 23 brightnessctl 24 ]; 25 26 files.".config/niri/config.kdl".source = ./config.kdl;
+27 -38
users/leah/presets/niri/services.nix
··· 5 ... 6 }: 7 let 8 - swaylock-config = { 9 - screenshots = true; 10 - scaling = "fit"; 11 - clock = true; 12 - indicator-idle-visible = true; 13 - grace = 3; 14 - effect-blur = "10x10"; 15 - effect-vignette = "0.5:0.8"; 16 - effect-pixelate = 4; 17 18 - text-color = "#cdd6f4"; 19 - inside-color = "#181825"; 20 - inside-clear-color = "#a6e3a1"; 21 - inside-ver-color = "#cba6f7"; 22 - inside-wrong-color = "#f38ba8"; 23 - ring-color = "#1e1e2e"; 24 - ring-clear-color = "#a6e3a1"; 25 - ring-ver-color = "#cba6f7"; 26 - ring-wrong-color = "#f38ba8"; 27 - key-hl-color = "#eba0ac"; 28 - bs-hl-color = "#6c7086"; 29 - line-color = "#313244"; 30 31 - timestr = "%H:%M"; 32 - datestr = "%e %b '%y / %a"; 33 }; 34 - 35 - swaylock' = pkgs.writeShellScript "swaylock" '' 36 - ${lib.getExe pkgs.swaylock} -f ${lib.cli.toGNUCommandLineShell { } swaylock-config} 37 - ''; 38 - 39 - swayidle' = pkgs.writeShellScriptBin "swayidle" '' 40 - ${lib.getExe pkgs.swayidle} -w \ 41 - timeout 300 ${swaylock'} \ 42 - timeout 600 '${pkgs.niri} msg action power-off-monitors' \ 43 - resume '${pkgs.niri} msg action power-on-monitors' \ 44 - before-sleep ${swaylock'} \ 45 - lock ${swaylock'} \ 46 - unlock 'pkill -SIGUSR1 -ux $USER ${swaylock'}' 47 - ''; 48 in 49 { 50 hjem.users.leah.packages = [ 51 swayidle' 52 ]; 53 54 security = { 55 polkit.enable = true; 56 soteria.enable = true; 57 }; 58 - 59 # Needed by the Waybar config 60 services.power-profiles-daemon.enable = true; 61
··· 5 ... 6 }: 7 let 8 + swaybg' = pkgs.writeShellApplication { 9 + name = "swaybg"; 10 + runtimeInputs = [ pkgs.swaybg ]; 11 + text = '' 12 + swaybg -i ${../../wallpaper.jpg} 13 + ''; 14 + }; 15 + 16 + swayidle' = pkgs.writeShellApplication { 17 + name = "swayidle"; 18 19 + runtimeInputs = [ 20 + pkgs.swayidle 21 + config.hjem.users.leah.ext.programs.swaylock.finalPackage 22 + pkgs.niri 23 + ]; 24 25 + text = '' 26 + exec swayidle -w \ 27 + timeout 180 swaylock \ 28 + timeout 360 'niri msg action power-off-monitors' \ 29 + resume 'niri msg action power-on-monitors' \ 30 + before-sleep swaylock \ 31 + lock swaylock \ 32 + unlock "pkill -SIGUSR1 swaylock" \ 33 + "$@" 34 + ''; 35 }; 36 in 37 { 38 hjem.users.leah.packages = [ 39 swayidle' 40 + swaybg' 41 ]; 42 43 security = { 44 polkit.enable = true; 45 soteria.enable = true; 46 }; 47 + 48 # Needed by the Waybar config 49 services.power-profiles-daemon.enable = true; 50
+41 -3
users/leah/programs/default.nix
··· 21 programs = { 22 localsend.enable = true; 23 nix-index-database.comma.enable = true; 24 }; 25 26 hjem.users.leah = { 27 packages = with pkgs; [ 28 # Apps 29 - nekoray 30 prismlauncher 31 vlc 32 thunderbird ··· 41 eza 42 ]; 43 44 - files.".config/starship.toml".source = ./starship.toml; 45 - 46 rum.programs.obs-studio.enable = true; 47 48 ext.programs = { ··· 67 settings = { 68 no-statusbar = true; 69 wrap = true; 70 }; 71 }; 72 };
··· 21 programs = { 22 localsend.enable = true; 23 nix-index-database.comma.enable = true; 24 + nekoray = { 25 + enable = true; 26 + tunMode.enable = true; 27 + }; 28 }; 29 30 hjem.users.leah = { 31 packages = with pkgs; [ 32 # Apps 33 + aseprite 34 prismlauncher 35 vlc 36 thunderbird ··· 45 eza 46 ]; 47 48 rum.programs.obs-studio.enable = true; 49 50 ext.programs = { ··· 69 settings = { 70 no-statusbar = true; 71 wrap = true; 72 + }; 73 + }; 74 + 75 + swaylock = { 76 + enable = true; 77 + package = pkgs.swaylock-effects; 78 + 79 + settings = { 80 + show-failed-attempts = true; 81 + ignore-empty-password = true; 82 + daemonize = true; 83 + 84 + screenshots = true; 85 + scaling = "fit"; 86 + clock = true; 87 + indicator-idle-visible = true; 88 + grace = 3; 89 + effect-blur = "10x10"; 90 + effect-vignette = "0.5:0.8"; 91 + effect-pixelate = 4; 92 + 93 + text-color = "#cdd6f4"; 94 + inside-color = "#181825"; 95 + inside-clear-color = "#a6e3a1"; 96 + inside-ver-color = "#cba6f7"; 97 + inside-wrong-color = "#f38ba8"; 98 + ring-color = "#1e1e2e"; 99 + ring-clear-color = "#a6e3a1"; 100 + ring-ver-color = "#cba6f7"; 101 + ring-wrong-color = "#f38ba8"; 102 + key-hl-color = "#eba0ac"; 103 + bs-hl-color = "#6c7086"; 104 + line-color = "#313244"; 105 + 106 + timestr = "%H:%M"; 107 + datestr = "%e %b '%y / %a"; 108 }; 109 }; 110 };
+10 -6
users/leah/programs/firefox/default.nix
··· 6 let 7 json = pkgs.formats.json { }; 8 wrappedFirefox = pkgs.firefox.override { 9 - extraPoliciesFiles = [(json.generate "firefox-policies.json" policies)]; 10 }; 11 12 addons = [ ··· 33 "{9a41dee2-b924-4161-a971-7fb35c053a4a}" # enhanced-h264ify 34 "sponsorBlocker@ajay.app" # SponsorBlock for YouTube 35 "{0d7cafdd-501c-49ca-8ebb-e3341caaa55e}" # YouTube NonStop 36 - 37 # Utilities 38 "{d634138d-c276-4fc8-924b-40a0ea21d284}" # 1Password 39 "{c2c003ee-bd69-42a2-b0e9-6f34222cb046}" # Auto Tab Discard ··· 45 46 policies = { 47 ExtensionSettings = lib.listToAttrs ( 48 - map (id: lib.nameValuePair id { 49 - installation_mode = "normal_installed"; 50 - install_url = "https://addons.mozilla.org/firefox/downloads/latest/${id}/latest.xpi"; 51 - }) addons); 52 }; 53 54 # TODO: Specifying custom search engines is *very* cursed.
··· 6 let 7 json = pkgs.formats.json { }; 8 wrappedFirefox = pkgs.firefox.override { 9 + extraPoliciesFiles = [ (json.generate "firefox-policies.json" policies) ]; 10 }; 11 12 addons = [ ··· 33 "{9a41dee2-b924-4161-a971-7fb35c053a4a}" # enhanced-h264ify 34 "sponsorBlocker@ajay.app" # SponsorBlock for YouTube 35 "{0d7cafdd-501c-49ca-8ebb-e3341caaa55e}" # YouTube NonStop 36 + 37 # Utilities 38 "{d634138d-c276-4fc8-924b-40a0ea21d284}" # 1Password 39 "{c2c003ee-bd69-42a2-b0e9-6f34222cb046}" # Auto Tab Discard ··· 45 46 policies = { 47 ExtensionSettings = lib.listToAttrs ( 48 + map ( 49 + id: 50 + lib.nameValuePair id { 51 + installation_mode = "normal_installed"; 52 + install_url = "https://addons.mozilla.org/firefox/downloads/latest/${id}/latest.xpi"; 53 + } 54 + ) addons 55 + ); 56 }; 57 58 # TODO: Specifying custom search engines is *very* cursed.
+9 -1
users/leah/programs/fish.nix
··· 1 { 2 config, 3 ... 4 }: 5 { ··· 10 hjem.users.leah.rum.programs.fish = { 11 enable = true; 12 inherit (config.programs.fish) package; 13 - 14 functions.eza = "eza --git --icons=auto"; 15 abbrs = { 16 ls = "eza"; ··· 19 lt = "eza --tree"; 20 lla = "eza -la"; 21 }; 22 }; 23 }
··· 1 { 2 config, 3 + lib, 4 + pkgs, 5 ... 6 }: 7 { ··· 12 hjem.users.leah.rum.programs.fish = { 13 enable = true; 14 inherit (config.programs.fish) package; 15 + 16 functions.eza = "eza --git --icons=auto"; 17 abbrs = { 18 ls = "eza"; ··· 21 lt = "eza --tree"; 22 lla = "eza -la"; 23 }; 24 + 25 + earlyConfigFiles.starship = '' 26 + ${lib.getExe pkgs.starship} init fish | source 27 + ''; 28 }; 29 + 30 + hjem.users.leah.files.".config/starship.toml".source = ./starship.toml; 31 }
+3 -2
users/leah/programs/vcs.nix
··· 45 46 ui = { 47 default-command = [ "log" ]; 48 - diff.tool = "difft"; 49 pager = "${lib.getExe pkgs.moar} -no-linenumbers"; 50 log-word-wrap = true; 51 }; ··· 72 "--ignore-working-copy" 73 "log" 74 "--color=always" 75 ]; 76 }; 77 78 revsets = { 79 - log = "current()"; 80 short-prefixes = "current()"; 81 }; 82
··· 45 46 ui = { 47 default-command = [ "log" ]; 48 + diff-formatter = "difft"; 49 pager = "${lib.getExe pkgs.moar} -no-linenumbers"; 50 log-word-wrap = true; 51 }; ··· 72 "--ignore-working-copy" 73 "log" 74 "--color=always" 75 + "-r" 76 + "current()" 77 ]; 78 }; 79 80 revsets = { 81 short-prefixes = "current()"; 82 }; 83