diff --git a/flake.nix b/flake.nix index 791fc6d..0f07d86 100644 --- a/flake.nix +++ b/flake.nix @@ -27,12 +27,12 @@ outputs = { self, nixpkgs, ... }@inputs: { nixosModules = { ezpassthru = import ./modules/ezpassthru.nix; - ezpc = import ./modules/ezpc.nix; ezvahi = import ./modules/ezvahi.nix; ezwg = import ./modules/ezwg.nix; kiosk = import ./modules/kiosk.nix; fuckingprint = import ./modules/fuckingprint.nix; workstation = import ./modules/workstation.nix; + ezpw = import ./modules/ezpw.nix; all = import ./modules/default.nix; }; diff --git a/home-manager/modules/colors.nix b/home-manager/modules/colors.nix index d6542ca..b8fd437 100644 --- a/home-manager/modules/colors.nix +++ b/home-manager/modules/colors.nix @@ -17,11 +17,12 @@ let s' = builtins.match "(..)(..)(..)|(.)(.)(.)" c; ss = builtins.elemAt s'; o = if ss 0 == null then 3 else 0; - in { - r = ss (0 + o); - g = ss (1 + o); - b = ss (2 + o); - }; + in + { + r = ss (0 + o); + g = ss (1 + o); + b = ss (2 + o); + }; hexToRgb = c: builtins.mapAttrs (_: calc) (splitHex c); @@ -50,11 +51,13 @@ let } ); - genTheme = repo: mustache (makeScheme cfg.base16 // { - scheme-name = cfg.favColors.name; - scheme-slug = "idk"; - scheme-author = "nixos"; - }) cfg.favColors.name "${repo}/templates/default.mustache"; + genTheme = repo: mustache + (makeScheme cfg.base16 // { + scheme-name = cfg.favColors.name; + scheme-slug = "idk"; + scheme-author = "nixos"; + }) + cfg.favColors.name "${repo}/templates/default.mustache"; in { options.colors = { @@ -62,7 +65,7 @@ in i3BarColors = mkOption { description = "Exported color attrset for i3bar/swaybar"; - default = {}; + default = { }; }; waybarCss = mkOption { @@ -87,7 +90,7 @@ in favColors = mkOption { description = "Your favourite color scheme"; - default = {}; + default = { }; type = types.submodule { options = { name = mkOption { @@ -199,163 +202,163 @@ in showLabsSettings = true; }; in - mkIf cfg.enable { - # Read only utility attributes - colors.base16 = cfg.favColors.base16; - colors.base16Rgb = builtins.mapAttrs hexToRgb cfg.favColors.base16; - colors.base16Split = builtins.mapAttrs splitHex cfg.favColors.base16; + mkIf cfg.enable { + # Read only utility attributes + colors.base16 = cfg.favColors.base16; + colors.base16Rgb = builtins.mapAttrs hexToRgb cfg.favColors.base16; + colors.base16Split = builtins.mapAttrs splitHex cfg.favColors.base16; - # Element - xdg.configFile."Riot/config.json".text = builtins.toJSON elementConfig; - xdg.configFile."Element/config.json".text = builtins.toJSON elementConfig; - xdg.configFile."element_theme.json".text = builtins.toJSON elementTheme; + # Element + xdg.configFile."Riot/config.json".text = builtins.toJSON elementConfig; + xdg.configFile."Element/config.json".text = builtins.toJSON elementConfig; + xdg.configFile."element_theme.json".text = builtins.toJSON elementTheme; - # Mako - programs.mako = { - backgroundColor = "#${cfg.favColors.base16.base00}"; - textColor = "#${cfg.favColors.base16.base07}"; - borderColor = "#${cfg.favColors.base16.base08}"; - progressColor = "over #${cfg.favColors.base16.base0D}"; - }; - - # I3/sway - wayland.windowManager.sway = i3config; - xsession.windowManager.i3 = i3config; - colors.i3BarColors = { - background = "#${cfg.favColors.base16.base00}"; - separator = "#${cfg.favColors.base16.base01}"; - statusline = "#${cfg.favColors.base16.base04}"; - - focusedWorkspace = { - border = "#${cfg.favColors.base16.base05}"; - background = "#${cfg.favColors.base16.base0D}"; - text = "#${cfg.favColors.base16.base00}"; - }; - activeWorkspace = { - border = "#${cfg.favColors.base16.base05}"; - background = "#${cfg.favColors.base16.base03}"; - text = "#${cfg.favColors.base16.base00}"; - }; - inactiveWorkspace = { - border = "#${cfg.favColors.base16.base03}"; - background = "#${cfg.favColors.base16.base01}"; - text = "#${cfg.favColors.base16.base05}"; - }; - urgentWorkspace = { - border = "#${cfg.favColors.base16.base08}"; - background = "#${cfg.favColors.base16.base08}"; - text = "#${cfg.favColors.base16.base00}"; - }; - bindingMode = { - border = "#${cfg.favColors.base16.base00}"; - background = "#${cfg.favColors.base16.base0A}"; - text = "#${cfg.favColors.base16.base00}"; - }; - }; - - # Waybar - colors.waybarCss = - "\n" + ( - (import ../data/waybar-base16.nix) - cfg.favColors.name - cfg.base16 - ); - - # Dunst - services.dunst = { - settings = { - global = { - frame_color = "#${cfg.favColors.base16.base09}"; - separator_color = "#${cfg.favColors.base16.base05}"; - }; - - urgency_low = { - background = "#${cfg.favColors.base16.base01}"; - foreground = "#${cfg.favColors.base16.base03}"; - }; - - urgency_normal = { - background = "#${cfg.favColors.base16.base02}"; - foreground = "#${cfg.favColors.base16.base05}"; - }; - - urgency_critical = { - background = "#${cfg.favColors.base16.base08}"; - foreground = "#${cfg.favColors.base16.base06}"; - }; - }; - }; - - # Rofi - programs.rofi.theme = "${genTheme inputs.base16-rofi}"; - - # Kitty - programs.kitty.extraConfig = '' - include ${genTheme inputs.base16-kitty} - ''; - - # neovim - xdg.configFile."nvim/colors/base16.vim".text = import ../data/vim-base16.nix cfg.favColors.name cfg.favColors.base16; - programs.neovim.extraConfig = '' - colorscheme base16 - set termguicolors - ''; - - # GTK - gtk = { - enable = true; - theme = - let - generated-gtk-theme = pkgs.callPackage "${inputs.rycee}/pkgs/materia-theme" { - configBase16 = { - name = "Generated"; - kind = "dark"; - colors = builtins.mapAttrs (k: v: { hex.rgb = v; }) cfg.favColors.base16; - }; - }; - in - { - name = "Generated"; - package = generated-gtk-theme; - }; - gtk2.extraConfig = ( - (import ../data/gtk2-base16.nix) - cfg.favColors.name - cfg.favColors.base16 - ); - }; - - # Codium/VSCODE - programs.vscode.userSettings = { - "workbench.colorTheme" = "nix colors"; - }; - - home.file = lib.mkMerge - [ - ( - mkIf config.programs.vscode.enable { - ".vscode-oss/extensions/base16-1.0.0/themes/nix-colors.json".text = (import ../data/codium-base16.nix) cfg.favColors.name cfg.favColors.base16; - ".vscode-oss/extensions/base16-1.0.0/package.json".text = builtins.toJSON { - name = "nix colors"; - displayName = "Automatic Nix-generated base16 colors"; - version = "1.0.0"; - publisher = "colors"; - author = { - name = "ezpc usr"; - email = "usr@ezpc"; - }; - engines.vscode = "^1.11.1"; - categories = "Themes"; - contributes.themes = [ - { - label = "nix colors"; - uiTheme = "vs-dark"; - path = "./themes/nix-colors.json"; - } - ]; - }; - } - ) - ]; + # Mako + programs.mako = { + backgroundColor = "#${cfg.favColors.base16.base00}"; + textColor = "#${cfg.favColors.base16.base07}"; + borderColor = "#${cfg.favColors.base16.base08}"; + progressColor = "over #${cfg.favColors.base16.base0D}"; }; + + # I3/sway + wayland.windowManager.sway = i3config; + xsession.windowManager.i3 = i3config; + colors.i3BarColors = { + background = "#${cfg.favColors.base16.base00}"; + separator = "#${cfg.favColors.base16.base01}"; + statusline = "#${cfg.favColors.base16.base04}"; + + focusedWorkspace = { + border = "#${cfg.favColors.base16.base05}"; + background = "#${cfg.favColors.base16.base0D}"; + text = "#${cfg.favColors.base16.base00}"; + }; + activeWorkspace = { + border = "#${cfg.favColors.base16.base05}"; + background = "#${cfg.favColors.base16.base03}"; + text = "#${cfg.favColors.base16.base00}"; + }; + inactiveWorkspace = { + border = "#${cfg.favColors.base16.base03}"; + background = "#${cfg.favColors.base16.base01}"; + text = "#${cfg.favColors.base16.base05}"; + }; + urgentWorkspace = { + border = "#${cfg.favColors.base16.base08}"; + background = "#${cfg.favColors.base16.base08}"; + text = "#${cfg.favColors.base16.base00}"; + }; + bindingMode = { + border = "#${cfg.favColors.base16.base00}"; + background = "#${cfg.favColors.base16.base0A}"; + text = "#${cfg.favColors.base16.base00}"; + }; + }; + + # Waybar + colors.waybarCss = + "\n" + ( + (import ../data/waybar-base16.nix) + cfg.favColors.name + cfg.base16 + ); + + # Dunst + services.dunst = { + settings = { + global = { + frame_color = "#${cfg.favColors.base16.base09}"; + separator_color = "#${cfg.favColors.base16.base05}"; + }; + + urgency_low = { + background = "#${cfg.favColors.base16.base01}"; + foreground = "#${cfg.favColors.base16.base03}"; + }; + + urgency_normal = { + background = "#${cfg.favColors.base16.base02}"; + foreground = "#${cfg.favColors.base16.base05}"; + }; + + urgency_critical = { + background = "#${cfg.favColors.base16.base08}"; + foreground = "#${cfg.favColors.base16.base06}"; + }; + }; + }; + + # Rofi + programs.rofi.theme = "${genTheme inputs.base16-rofi}"; + + # Kitty + programs.kitty.extraConfig = '' + include ${genTheme inputs.base16-kitty} + ''; + + # neovim + xdg.configFile."nvim/colors/base16.vim".text = import ../data/vim-base16.nix cfg.favColors.name cfg.favColors.base16; + programs.neovim.extraConfig = '' + colorscheme base16 + set termguicolors + ''; + + # GTK + gtk = { + enable = true; + theme = + let + generated-gtk-theme = pkgs.callPackage "${inputs.rycee}/pkgs/materia-theme" { + configBase16 = { + name = "Generated"; + kind = "dark"; + colors = builtins.mapAttrs (k: v: { hex.rgb = v; }) cfg.favColors.base16; + }; + }; + in + { + name = "Generated"; + package = generated-gtk-theme; + }; + gtk2.extraConfig = ( + (import ../data/gtk2-base16.nix) + cfg.favColors.name + cfg.favColors.base16 + ); + }; + + # Codium/VSCODE + programs.vscode.userSettings = { + "workbench.colorTheme" = "nix colors"; + }; + + home.file = lib.mkMerge + [ + ( + mkIf config.programs.vscode.enable { + ".vscode-oss/extensions/base16-1.0.0/themes/nix-colors.json".text = (import ../data/codium-base16.nix) cfg.favColors.name cfg.favColors.base16; + ".vscode-oss/extensions/base16-1.0.0/package.json".text = builtins.toJSON { + name = "nix colors"; + displayName = "Automatic Nix-generated base16 colors"; + version = "1.0.0"; + publisher = "colors"; + author = { + name = "ezpc usr"; + email = "usr@ezpc"; + }; + engines.vscode = "^1.11.1"; + categories = "Themes"; + contributes.themes = [ + { + label = "nix colors"; + uiTheme = "vs-dark"; + path = "./themes/nix-colors.json"; + } + ]; + }; + } + ) + ]; + }; } diff --git a/home-manager/modules/ezpcusr.nix b/home-manager/modules/ezpcusr.nix index 1cfbed1..6cf244e 100644 --- a/home-manager/modules/ezpcusr.nix +++ b/home-manager/modules/ezpcusr.nix @@ -97,7 +97,7 @@ let ''; ezDrv = - pkgs.runCommand "ez" + pkgs.runCommand "ez-commands" { } ( '' @@ -121,17 +121,6 @@ let ) ); - # TODO: why wont this work in an overlay - pnpm2nix = - pkgs.callPackage - ( - builtins.fetchGit { - url = "https://github.com/notgne2/pnpm2nix.git"; - rev = "d2863404330c6646800a49e73240e29e3265b594"; - } - ) - { }; - rofiMenu = if cfg.wayland then "${rofiBin} -show drun -show-icons -run-command 'swaymsg exec -- {cmd}'" @@ -318,14 +307,10 @@ let menu = rofiMenu; - bars = - if (cfg.babybar || cfg.wayland != true) then [ - { - position = "top"; - colors = config.colors.i3BarColors; - } - ] else - [ ]; + bars = lib.optional (cfg.babybar || cfg.wayland != true) { + position = "top"; + colors = config.colors.i3BarColors; + }; gaps = { smartGaps = true; @@ -353,7 +338,7 @@ let )}" } ''; - }; + }; services.keynav.enable = true; services.clipmenu.enable = true; @@ -364,28 +349,6 @@ let programs.chromium = { enable = true; package = pkgs.ungoogled-chromium; - extensions = [ - { id = "cjpalhdlnbpafiamejdnhcphjbkeiagm"; } # ublock origin - { id = "eimadpbcbfnmbkopoojfekhnkhdbieeh"; } # dark reader - { id = "nngceckbapebfimnlniiiahkandclblb"; } # bitwarden - { - # chromium web store - id = "ocaahdebbfolfmndjeplogmgcagdmblk"; - crxPath = builtins.fetchurl { - name = "chromium-web-store.crx"; - url = "https://github.com/NeverDecaf/chromium-web-store/releases/download/v1.4.0/Chromium.Web.Store.crx"; - sha256 = "1bfzd02a9krkapkbj51kxfp4a1q5x2m2pz5kv98ywfcarbivskgs"; - }; - version = "1.4.0"; - } - { id = "lanfdkkpgfjfdikkncbnojekcppdebfp"; } # canvas fingerprint defend - { id = "fhkphphbadjkepgfljndicmgdlndmoke"; } # font fingerprint defend - { id = "olnbjpaejebpnokblkepbphhembdicik"; } # webgl fingerprint defend - { id = "pcbjiidheaempljdefbdplebgdgpjcbe"; } # audio fingerprint defend - { id = "dhdgffkkebhmkfjojejmpbldmpobfkfo"; } # tampermonkey - { id = "dbepggeogbaibhgnhhndojpepiihcmeb"; } # vimium - { id = "npeicpdbkakmehahjeeohfdhnlpdklia"; } # webrtc network limiter - ]; }; services.lorri.enable = true; @@ -412,33 +375,6 @@ let Install = { WantedBy = [ "graphical-session.target" ]; }; }; - # systemd.user.services.pulseaudio-dlna = { - # Unit = { - # Description = - # "A lightweight streaming server which brings DLNA / UPNP and Chromecast support to PulseAudio and Linux"; - # After = [ "network.target" "sound.target" ]; - # }; - - # Service = { - # ExecStart = "${pkgs.pulseaudio-dlna}/bin/pulseaudio-dlna --port 10291"; - # Environment = - # let - # toolPaths = makeBinPath [ pkgs.pulseaudio pkgs.dbus ]; - # in - # [ "PATH=${toolPaths}" ]; - # type = "idle"; - # }; - - # Install = { WantedBy = [ "default.target" ]; }; - # }; - - xdg.configFile."fish/functions/humanize_duration.fish".source = - pkgs.fetchurl { - url = - "https://raw.githubusercontent.com/fishpkg/fish-humanize-duration/master/humanize_duration.fish"; - sha256 = "0abjc9dab8sx2lr28dp36vy9c4rd95badiypbkfjyvdxd9nig6zr"; - }; - home.sessionVariables = { BW_SESSION = cfg.bitwardenSession; }; services.mpd = { @@ -489,10 +425,25 @@ let fonts.fontconfig.enable = true; home.packages = with pkgs; + let + steam = pkgs.steam.override { withJava = true; }; + + steam-run = steam.run; + + newwine = (pkgs.wineFull.override { wineBuild = "wineWow"; wineRelease = "staging"; }); + newwinetricks = pkgs.winetricks.override { wine = newwine; }; + + oldwine = pkgs.wineWowPackages.full; + oldwinetricks = pkgs.winetricks.override { wine = oldwine; }; + in [ + + xlibs.xf86inputjoystick + oldwine + oldwinetricks + flameshot - # needed for fish done stuff jq ezDrv @@ -502,35 +453,47 @@ let kitty pavucontrol mpv - youtube-dl + yt-dlp xorg.xkill maim slop ark - gwenview notify-osd libnotify ffmpeg id3v2 imagemagick - gimp - mumble - libreoffice mpc_cli nix-index - ] - ++ ( - if cfg.developer then [ - openvpn - gitAndTools.hub - morph - nmap - nixpkgs-fmt - ] else - [ ] - ); + ] ++ (lib.optionals cfg.developer [ + openvpn + gitAndTools.hub + nmap + nixpkgs-fmt + ]) ++ (lib.optionals cfg.gaming [ + xlibs.xf86inputjoystick + oldwine + oldwinetricks + ]) ++ (lib.optionals (cfg.gaming && !cfg.flatSteam) [ + steam + steam-run + (writeScriptBin "steam-run-native" '' + #!${pkgs.stdenv.shell} + ${(steam.override { nativeOnly = true; }).run}/bin/steam-run $@ + '') + ]) ++ (lib.optionals (cfg.gaming && cfg.newWine) [ + ( + pkgs.runCommand "new-wine-stuff" + { } '' + mkdir -p $out/bin + ln -s ${newwine}/bin/wine $out/bin/new-wine + ln -s ${newwine}/bin/winecfg $out/bin/new-winecfg + ln -s ${newwinetricks}/bin/winetricks $out/bin/new-winetricks + '' + ) + ]); programs.rofi = { enable = true; @@ -557,7 +520,7 @@ let ({ modules-left = [ "sway/workspaces" "sway/mode" ]; modules-center = [ "clock" "mpd" ]; - modules-right = (if cfg.battery then [ "battery" ] else [ ]) + modules-right = (lib.optional cfg.battery "battery") ++ [ "pulseaudio" "network" "memory" "cpu" "temperature" "tray" ]; position = "left"; width = 50; @@ -698,10 +661,7 @@ let pkgs.swayidle xwayland rxvt_unicode - dmenu libappindicator-gtk3 - xdg-desktop-portal - xdg-desktop-portal-wlr ]; }; xConfig = @@ -802,15 +762,7 @@ let vSync = true; #refreshRate = 144; blur = true; - package = pkgs.picom.overrideAttrs ( - _: { - src = builtins.fetchGit { - url = "https://github.com/ibhagwan/picom"; - ref = "next-rebase"; - rev = "6d87428f78a46bea295e0a21d23c4b56133aadc3"; - }; - } - ); + package = pkgs.picom; experimentalBackends = true; blurExclude = [ "window_type = 'dock'" @@ -851,6 +803,18 @@ in options.ezpcusr = { enable = mkEnableOption "Enable simple PC user config"; + newWine = mkOption { + type = types.bool; + default = false; + description = "If you want to include wine-staging as new-wine"; + }; + + flatSteam = mkOption { + type = types.bool; + default = false; + description = "If you use the flatpak Steam instead of NixOS"; + }; + wayland = mkOption { default = true; description = "Enable wayland config (disabling this is experimental)"; @@ -969,12 +933,6 @@ in default = false; description = "If this PC has a battery"; }; - - tiling = mkOption { - type = types.bool; - default = true; - description = "If you are based and redpilled, and want a tiling WM (deprecated)"; - }; }; config = mkIf cfg.enable ( diff --git a/home-manager/users/notgne2_pc.nix b/home-manager/users/notgne2_pc.nix index 3f51d1c..d18518d 100644 --- a/home-manager/users/notgne2_pc.nix +++ b/home-manager/users/notgne2_pc.nix @@ -115,7 +115,7 @@ in pname = "firenvim"; src = inputs.firenvim; # yes im stupid - version = builtins.readFile (pkgs.runCommandNoCC "firenvim-version" {} '' + version = builtins.readFile (pkgs.runCommandNoCC "firenvim-version" { } '' ${pkgs.jq}/bin/jq -j .version < ${inputs.firenvim}/package.json > $out ''); }) diff --git a/modules/default.nix b/modules/default.nix index 7b76543..4e315b7 100644 --- a/modules/default.nix +++ b/modules/default.nix @@ -4,10 +4,10 @@ imports = [ ./ezvahi.nix ./ezwg.nix - ./ezpc.nix ./kiosk.nix ./ezpassthru.nix ./fuckingprint.nix ./workstation.nix + ./ezpw.nix ]; } diff --git a/modules/ezpc.nix b/modules/ezpc.nix deleted file mode 100644 index 052e953..0000000 --- a/modules/ezpc.nix +++ /dev/null @@ -1,208 +0,0 @@ -{ config, lib, pkgs, ... }: -with lib; -let - cfg = config.ezpc; - - mainConfig = { - services.thermald.enable = true; - - environment.etc."chromium/policies/managed/policies.json".text = '' - { - "NewTabPageLocation": "https://wizbos.club/" - } - ''; - - workstation.enable = true; - workstation.user = cfg.user; - - networking.firewall.allowedTCPPorts = [ 22 ]; - networking.firewall.allowedUDPPorts = [ 1900 ]; - - hardware.pulseaudio.enable = lib.mkDefault false; - sound.enable = lib.mkDefault false; - - services.pipewire = { - enable = lib.mkDefault true; - jack.enable = lib.mkDefault true; - alsa.enable = lib.mkDefault true; - alsa.support32Bit = lib.mkDefault true; - pulse.enable = lib.mkDefault true; - media-session.config.bluez-monitor = { - properties = { - "bluez5.codecs" = [ "sbc" "aac" "ldac" "aptx" "aptx_hd" ]; - "bluez5.mdbc-support" = true; - }; - rules = [ - { - actions = { - update-props = { - "bluez5.auto-connect" = [ "hfp_hf" "hsp_hs" "a2dp_sink" ]; - "bluez5.hw-volume" = - [ "hfp_ag" "hsp_ag" "a2dp_source" "a2dp_sink" ]; - }; - }; - matches = [{ "device.name" = "~bluez_card.*"; }]; - } - { - actions = { update-props = { "node.pause-on-idle" = false; }; }; - matches = [ - { "node.name" = "~bluez_input.*"; } - { "node.name" = "~bluez_output.*"; } - ]; - } - ]; - }; - }; - - xdg.portal.enable = lib.mkDefault true; - xdg.portal.gtkUsePortal = lib.mkDefault true; - xdg.portal.extraPortals = lib.mkDefault (with pkgs; [ xdg-desktop-portal-wlr xdg-desktop-portal-gtk ]); - - # let me use audio and phones - programs.adb.enable = cfg.developer; - - # Set some X11 props - services.xserver = { - enable = lib.mkDefault false; - layout = lib.mkDefault "us"; - libinput.enable = true; - }; - security.pam.services = { - swaylock.text = '' - auth include login - ''; - }; - }; - notBatteryConfig = { - powerManagement.cpuFreqGovernor = lib.mkDefault "ondemand"; - }; - batteryConfig = { - services.upower = { - enable = true; - percentageLow = 15; - percentageCritical = 10; - percentageAction = 5; - }; - services.tlp.enable = true; - services.tlp.extraConfig = '' - TLP_ENABLE=1 - CPU_SCALING_GOVERNOR_ON_BAT=powersave - CPU_SCALING_GOVERNOR_ON_AC=ondemand - CPU_BOOST_ON_BAT=0 - CPU_BOOST_ON_AC=1 - CPU_MIN_PERF_ON_BAT=0 - CPU_MAX_PERF_ON_BAT=30 - CPU_MIN_PERF_ON_AC=0 - CPU_MAX_PERF_ON_AC=100 - CPU_ENERGY_PERF_POLICY_ON_BAT=power - CPU_ENERGY_PERF_POLICY_ON_AC=ondemand - ''; - }; - gamingConfig = { - environment.systemPackages = - let - steam = pkgs.steam.override { withJava = true; }; - - steam-run = steam.run; - - newwine = (pkgs.wineFull.override { wineBuild = "wineWow"; wineRelease = "staging"; }); - newwinetricks = pkgs.winetricks.override { wine = newwine; }; - - oldwine = (pkgs.wineFull.override { wineBuild = "wineWow"; }); - oldwinetricks = pkgs.winetricks.override { wine = oldwine; }; - in - with pkgs; ([ - xlibs.xf86inputjoystick - oldwine - oldwinetricks - ] ++ (if !cfg.flatSteam then [ - steam - steam-run - (writeScriptBin "steam-run-native" '' - #!${pkgs.stdenv.shell} - ${(steam.override { nativeOnly = true; }).run}/bin/steam-run $@ - '') - ] else [ - # steam-run-native - ]) ++ ( - if cfg.newWine then [ - ( - pkgs.runCommand "new-wine-stuff" - { } '' - mkdir -p $out/bin - ln -s ${newwine}/bin/wine $out/bin/new-wine - ln -s ${newwine}/bin/winecfg $out/bin/new-winecfg - ln -s ${newwinetricks}/bin/winetricks $out/bin/new-winetricks - '' - ) - ] else [ ] - )); - }; -in -{ - options.ezpc = { - enable = mkEnableOption "Enable simple PC config"; - - battery = mkOption { - type = types.bool; - default = false; - description = "If this device has a battery"; - }; - - portals = mkOption { - type = types.bool; - default = false; - description = "use weird new hipster portal shit"; - }; - - user = mkOption { - type = types.str; - description = "The main user of this PC"; - }; - - gaming = mkOption { - type = types.bool; - default = false; - description = "If this PC is used for gaming"; - }; - - flatSteam = mkOption { - type = types.bool; - default = false; - description = "If you use the flatpak Steam instead of NixOS"; - }; - - print = mkOption { - type = types.bool; - default = false; - description = "If this PC should support printing/scanning"; - }; - - developer = mkOption { - type = types.bool; - default = true; - description = "Should enable advanced shit for developers"; - }; - - bluetooth = mkOption { - type = types.bool; - default = false; - description = "If this PC has bluetooth support"; - }; - - newWine = mkOption { - type = types.bool; - default = false; - description = "If you want to include wine-staging as new-wine"; - }; - }; - - config = mkIf cfg.enable ( - mkMerge [ - mainConfig - (mkIf cfg.gaming gamingConfig) - (mkIf cfg.battery batteryConfig) - (mkIf (cfg.battery != true) notBatteryConfig) - ] - ); -} diff --git a/modules/ezpw.nix b/modules/ezpw.nix new file mode 100644 index 0000000..8a5cd03 --- /dev/null +++ b/modules/ezpw.nix @@ -0,0 +1,54 @@ +{ config, lib, pkgs, ... }: +with lib; +let + cfg = config.services.ezpw; +in +{ + options.services.ezpw = { + enable = + mkEnableOption + "Enable pipewire"; + }; + + config = mkIf cfg.enable { + hardware.pulseaudio.enable = lib.mkDefault false; + sound.enable = lib.mkDefault false; + + services.pipewire = { + enable = lib.mkDefault true; + jack.enable = lib.mkDefault true; + alsa.enable = lib.mkDefault true; + alsa.support32Bit = lib.mkDefault true; + pulse.enable = lib.mkDefault true; + media-session.config.bluez-monitor = { + properties = { + "bluez5.codecs" = [ "sbc" "aac" "ldac" "aptx" "aptx_hd" ]; + "bluez5.mdbc-support" = true; + }; + rules = [ + { + actions = { + update-props = { + "bluez5.auto-connect" = [ "hfp_hf" "hsp_hs" "a2dp_sink" ]; + "bluez5.hw-volume" = + [ "hfp_ag" "hsp_ag" "a2dp_source" "a2dp_sink" ]; + }; + }; + matches = [{ "device.name" = "~bluez_card.*"; }]; + } + { + actions = { update-props = { "node.pause-on-idle" = false; }; }; + matches = [ + { "node.name" = "~bluez_input.*"; } + { "node.name" = "~bluez_output.*"; } + ]; + } + ]; + }; + }; + + xdg.portal.enable = lib.mkDefault true; + xdg.portal.gtkUsePortal = lib.mkDefault true; + xdg.portal.extraPortals = lib.mkDefault (with pkgs; [ xdg-desktop-portal-wlr xdg-desktop-portal-gtk ]); + }; +} diff --git a/modules/workstation.nix b/modules/workstation.nix index 75841ed..46f3a6c 100644 --- a/modules/workstation.nix +++ b/modules/workstation.nix @@ -11,13 +11,58 @@ in type = types.str; description = "The main user of this PC"; }; + + battery = mkOption { + type = types.bool; + default = false; + description = "If this device has a battery"; + }; }; config = mkIf cfg.enable { - # support gay men (and video) + services.ezpw.enable = lib.mkDefault true; + + security.pam.services = { + swaylock.text = '' + auth include login + ''; + }; + + services.thermald.enable = lib.mkDefault true; + + # Don't kill the battery + services.upower = { + enable = lib.mkDefault cfg.battery; + percentageLow = 15; + percentageCritical = 10; + percentageAction = 5; + criticalPowerAction = "Hibernate"; + }; + + # Make battery usage sane + services.tlp = { + enable = lib.mkDefault cfg.battery; + extraConfig = '' + TLP_ENABLE=1 + CPU_SCALING_GOVERNOR_ON_BAT=powersave + CPU_SCALING_GOVERNOR_ON_AC=ondemand + CPU_BOOST_ON_BAT=0 + CPU_BOOST_ON_AC=1 + CPU_MIN_PERF_ON_BAT=0 + CPU_MAX_PERF_ON_BAT=30 + CPU_MIN_PERF_ON_AC=0 + CPU_MAX_PERF_ON_AC=100 + CPU_ENERGY_PERF_POLICY_ON_BAT=power + CPU_ENERGY_PERF_POLICY_ON_AC=ondemand + ''; + }; + + # Video support hardware.opengl = { enable = true; + # Fix steam driSupport32Bit = true; + # Other drivers extraPackages = with pkgs; [ intel-media-driver vaapiIntel @@ -25,9 +70,12 @@ in libvdpau-va-gl ]; }; - hardware.steam-hardware.enable = true; - hardware.uinput.enable = true; - fonts.fontconfig.cache32Bit = true; + + # Support for steam hardware + hardware.steam-hardware.enable = lib.mkDefault true; + + # Needed for lots of controller stuff + hardware.uinput.enable = lib.mkDefault true; # proton esync systemd.extraConfig = "DefaultLimitNOFILE=1048576"; @@ -58,16 +106,19 @@ in ]; }; - # fuck alsa - nixpkgs.config.pulseaudio = true; - # brightness - programs.light.enable = true; + programs.light.enable = lib.mkDefault true; # make fonts not fucked up - fonts.fontconfig.enable = true; - fonts.enableDefaultFonts = true; - services.xserver.dpi = lib.mkDefault 96; + fonts.fontconfig.enable = lib.mkDefault true; + fonts.enableDefaultFonts = lib.mkDefault true; + # Important for steam + fonts.fontconfig.cache32Bit = lib.mkDefault true; + services.xserver = { + dpi = lib.mkDefault 96; + layout = lib.mkDefault "us"; + libinput.enable = lib.mkDefault true; + }; # this helps with some compatibility hardware.pulseaudio.daemon.config = { @@ -86,8 +137,11 @@ in } ]; + # Used for upnp or something? + networking.firewall.allowedUDPPorts = [ 1900 ]; + # Shit breaks without this lol - programs.dconf.enable = true; + programs.dconf.enable = lib.mkDefault true; # better default swap boot.kernel.sysctl = { "vm.swappiness" = lib.mkDefault 45; }; @@ -98,22 +152,20 @@ in ]; # self explanatory - fuckingprint.enable = true; + fuckingprint.enable = lib.mkDefault true; - # Enable sound. - sound.enable = lib.mkOverride 1100 true; - hardware.pulseaudio.enable = lib.mkOverride 1100 true; + # Pulseaudio is off by defaultm but if you want it, make it work right hardware.pulseaudio.support32Bit = lib.mkDefault true; hardware.pulseaudio.zeroconf.discovery.enable = lib.mkDefault true; hardware.pulseaudio.package = pkgs.pulseaudioFull; + hardware.pulseaudio.extraModules = [ pkgs.pulseaudio-modules-bt ]; hardware.pulseaudio.extraConfig = '' load-module module-dbus-protocol ''; # bluetooth - services.blueman.enable = true; - hardware.bluetooth.enable = true; - hardware.pulseaudio.extraModules = [ pkgs.pulseaudio-modules-bt ]; + services.blueman.enable = lib.mkDefault true; + hardware.bluetooth.enable = lib.mkDefault true; hardware.bluetooth.settings.General.Enable = "Source,Sink,Media,Socket"; }; }