From d9cbfc07dc73e971a67eb4a29372c7c83d433609 Mon Sep 17 00:00:00 2001 From: winston Date: Tue, 28 Nov 2023 12:21:17 +0100 Subject: [PATCH] feat: add isGraphical target option --- flake.nix | 3 + home/apps/browsers.nix | 311 ++++++++++++++++---------------- home/apps/colorscheme-sync.nix | 91 +++++----- home/apps/default.nix | 10 + home/apps/discord.nix | 126 ++++++------- home/apps/fonts.nix | 40 ++-- home/apps/gpg.nix | 11 +- home/apps/gtk.nix | 80 ++++---- home/apps/media.nix | 31 ++-- home/apps/rice.nix | 195 ++++++++++---------- home/apps/sway.nix | 60 +++--- home/apps/vscode.nix | 2 +- home/apps/wezterm.nix | 62 ++++--- home/default.nix | 2 +- home/lib.nix | 1 + machines/common/shared/user.nix | 4 +- machines/futomaki/default.nix | 2 +- machines/lib.nix | 13 +- 18 files changed, 546 insertions(+), 498 deletions(-) diff --git a/flake.nix b/flake.nix index f538090..e1d4cba 100644 --- a/flake.nix +++ b/flake.nix @@ -31,16 +31,19 @@ system = "aarch64-darwin"; username = "winston"; extraModules = [inputs.nekowinston-nur.darwinModules.default]; + isGraphical = true; } { host = "futomaki"; system = "x86_64-linux"; username = "winston"; + isGraphical = true; } { host = "bento"; system = "x86_64-linux"; username = "w"; + isGraphical = true; } ]; imports = [inputs.pre-commit-hooks.flakeModule]; diff --git a/home/apps/browsers.nix b/home/apps/browsers.nix index a52f81e..debc8f5 100644 --- a/home/apps/browsers.nix +++ b/home/apps/browsers.nix @@ -1,165 +1,170 @@ { + config, lib, pkgs, ... }: let - inherit (pkgs.stdenv.hostPlatform) isLinux; + inherit (pkgs.stdenv) isLinux; in { - programs.chromium = { - enable = true; - package = pkgs.ungoogled-chromium; - }; + config = lib.mkIf config.isGraphical { + programs.chromium = { + enable = isLinux; + package = pkgs.ungoogled-chromium; + }; - programs.firefox = { - enable = isLinux; - profiles.default = { - search.default = "DuckDuckGo"; - search.force = true; - extensions = with pkgs.nur.repos.rycee.firefox-addons; [ - bitwarden - clearurls - darkreader - decentraleyes - i-dont-care-about-cookies - languagetool - mailvelope - multi-account-containers - onepassword-password-manager - refined-github - temporary-containers - ublock-origin - vimium - ]; - settings = { - "app.normandy.api_url" = ""; - "app.normandy.enabled" = false; - "app.shield.optoutstudies.enabled" = false; - "app.update.auto" = false; - "beacon.enabled" = false; - "breakpad.reportURL" = ""; - "browser.aboutConfig.showWarning" = false; - "browser.cache.offline.enable" = false; - "browser.crashReports.unsubmittedCheck.autoSubmit" = false; - "browser.crashReports.unsubmittedCheck.autoSubmit2" = false; - "browser.crashReports.unsubmittedCheck.enabled" = false; - "browser.disableResetPrompt" = true; - "browser.formfill.enable" = false; - "browser.newtab.preload" = false; - "browser.newtabpage.activity-stream.section.highlights.includePocket" = false; - "browser.newtabpage.enabled" = false; - "browser.newtabpage.enhanced" = false; - "browser.newtabpage.introShown" = true; - "browser.quitShortcut.disabled" = true; - "browser.safebrowsing.appRepURL" = ""; - "browser.safebrowsing.blockedURIs.enabled" = false; - "browser.safebrowsing.downloads.enabled" = false; - "browser.safebrowsing.downloads.remote.enabled" = false; - "browser.safebrowsing.downloads.remote.url" = ""; - "browser.safebrowsing.enabled" = false; - "browser.safebrowsing.malware.enabled" = false; - "browser.safebrowsing.phishing.enabled" = false; - "browser.selfsupport.url" = ""; - "browser.send_pings" = false; - "browser.sessionstore.privacy_level" = 0; - "browser.shell.checkDefaultBrowser" = false; - "browser.startup.homepage_override.mstone" = "ignore"; - "browser.tabs.crashReporting.sendReport" = false; - "browser.tabs.firefox-view" = false; - "browser.urlbar.groupLabels.enabled" = false; - "browser.urlbar.quicksuggest.enabled" = false; - "browser.urlbar.speculativeConnect.enabled" = false; - "browser.urlbar.trimURLs" = false; - "browser.warnOnQuitShortcut" = false; - "datareporting.healthreport.service.enabled" = false; - "datareporting.healthreport.uploadEnabled" = false; - "datareporting.policy.dataSubmissionEnabled" = false; - "device.sensors.ambientLight.enabled" = false; - "device.sensors.enabled" = false; - "device.sensors.motion.enabled" = false; - "device.sensors.orientation.enabled" = false; - "device.sensors.proximity.enabled" = false; - "dom.battery.enabled" = false; - "dom.security.https_only_mode" = true; - "dom.security.https_only_mode_ever_enabled" = true; - "dom.webaudio.enabled" = false; - "experiments.activeExperiment" = false; - "experiments.enabled" = false; - "experiments.manifest.uri" = ""; - "experiments.supported" = false; - "extensions.CanvasBlocker@kkapsner.de.whiteList" = ""; - "extensions.ClearURLs@kevinr.whiteList" = ""; - "extensions.Decentraleyes@ThomasRientjes.whiteList" = ""; - "extensions.FirefoxMulti-AccountContainers@mozilla.whiteList" = ""; - "extensions.TemporaryContainers@stoically.whiteList" = ""; - "extensions.autoDisableScopes" = 14; - "extensions.getAddons.cache.enabled" = false; - "extensions.getAddons.showPane" = false; - "extensions.pocket.enabled" = false; - "extensions.shield-recipe-client.api_url" = ""; - "extensions.shield-recipe-client.enabled" = false; - "extensions.webservice.discoverURL" = ""; - "media.autoplay.default" = 1; - "media.autoplay.enabled" = false; - "media.navigator.enabled" = false; - "media.peerconnection.enabled" = false; - "media.video_stats.enabled" = false; - "network.IDN_show_punycode" = true; - "network.allow-experiments" = false; - "network.captive-portal-service.enabled" = false; - "network.cookie.cookieBehavior" = 1; - "network.dns.disablePrefetch" = true; - "network.dns.disablePrefetchFromHTTPS" = true; - "network.http.referer.spoofSource" = true; - "network.http.speculative-parallel-limit" = 0; - "network.predictor.enable-prefetch" = false; - "network.predictor.enabled" = false; - "network.prefetch-next" = false; - "pdfjs.enableScripting" = false; - "privacy.donottrackheader.enabled" = true; - "privacy.donottrackheader.value" = 1; - "privacy.query_stripping" = true; - "privacy.trackingprotection.cryptomining.enabled" = true; - "privacy.trackingprotection.enabled" = true; - "privacy.trackingprotection.fingerprinting.enabled" = true; - "privacy.trackingprotection.pbmode.enabled" = true; - "privacy.usercontext.about_newtab_segregation.enabled" = true; - "security.ssl.disable_session_identifiers" = true; - "services.sync.prefs.sync.browser.newtabpage.activity-stream.showSponsoredTopSite" = false; - "signon.autofillForms" = false; - "toolkit.telemetry.archive.enabled" = false; - "toolkit.telemetry.bhrPing.enabled" = false; - "toolkit.telemetry.cachedClientID" = ""; - "toolkit.telemetry.enabled" = false; - "toolkit.telemetry.firstShutdownPing.enabled" = false; - "toolkit.telemetry.hybridContent.enabled" = false; - "toolkit.telemetry.newProfilePing.enabled" = false; - "toolkit.telemetry.prompted" = 2; - "toolkit.telemetry.rejected" = true; - "toolkit.telemetry.reportingpolicy.firstRun" = false; - "toolkit.telemetry.server" = ""; - "toolkit.telemetry.shutdownPingSender.enabled" = false; - "toolkit.telemetry.unified" = false; - "toolkit.telemetry.unifiedIsOptIn" = false; - "toolkit.telemetry.updatePing.enabled" = false; - "webgl.disabled" = true; - "webgl.renderer-string-override" = " "; - "webgl.vendor-string-override" = " "; + programs.firefox = { + enable = isLinux; + profiles.default = { + search.default = "DuckDuckGo"; + search.force = true; + extensions = with pkgs.nur.repos.rycee.firefox-addons; [ + bitwarden + clearurls + darkreader + decentraleyes + i-dont-care-about-cookies + languagetool + mailvelope + multi-account-containers + onepassword-password-manager + refined-github + temporary-containers + ublock-origin + vimium + ]; + settings = { + "app.normandy.api_url" = ""; + "app.normandy.enabled" = false; + "app.shield.optoutstudies.enabled" = false; + "app.update.auto" = false; + "beacon.enabled" = false; + "breakpad.reportURL" = ""; + "browser.aboutConfig.showWarning" = false; + "browser.cache.offline.enable" = false; + "browser.crashReports.unsubmittedCheck.autoSubmit" = false; + "browser.crashReports.unsubmittedCheck.autoSubmit2" = false; + "browser.crashReports.unsubmittedCheck.enabled" = false; + "browser.disableResetPrompt" = true; + "browser.formfill.enable" = false; + "browser.newtab.preload" = false; + "browser.newtabpage.activity-stream.section.highlights.includePocket" = false; + "browser.newtabpage.enabled" = false; + "browser.newtabpage.enhanced" = false; + "browser.newtabpage.introShown" = true; + "browser.quitShortcut.disabled" = true; + "browser.safebrowsing.appRepURL" = ""; + "browser.safebrowsing.blockedURIs.enabled" = false; + "browser.safebrowsing.downloads.enabled" = false; + "browser.safebrowsing.downloads.remote.enabled" = false; + "browser.safebrowsing.downloads.remote.url" = ""; + "browser.safebrowsing.enabled" = false; + "browser.safebrowsing.malware.enabled" = false; + "browser.safebrowsing.phishing.enabled" = false; + "browser.selfsupport.url" = ""; + "browser.send_pings" = false; + "browser.sessionstore.privacy_level" = 0; + "browser.shell.checkDefaultBrowser" = false; + "browser.startup.homepage_override.mstone" = "ignore"; + "browser.tabs.crashReporting.sendReport" = false; + "browser.tabs.firefox-view" = false; + "browser.urlbar.groupLabels.enabled" = false; + "browser.urlbar.quicksuggest.enabled" = false; + "browser.urlbar.speculativeConnect.enabled" = false; + "browser.urlbar.trimURLs" = false; + "browser.warnOnQuitShortcut" = false; + "datareporting.healthreport.service.enabled" = false; + "datareporting.healthreport.uploadEnabled" = false; + "datareporting.policy.dataSubmissionEnabled" = false; + "device.sensors.ambientLight.enabled" = false; + "device.sensors.enabled" = false; + "device.sensors.motion.enabled" = false; + "device.sensors.orientation.enabled" = false; + "device.sensors.proximity.enabled" = false; + "dom.battery.enabled" = false; + "dom.security.https_only_mode" = true; + "dom.security.https_only_mode_ever_enabled" = true; + "dom.webaudio.enabled" = false; + "experiments.activeExperiment" = false; + "experiments.enabled" = false; + "experiments.manifest.uri" = ""; + "experiments.supported" = false; + "extensions.CanvasBlocker@kkapsner.de.whiteList" = ""; + "extensions.ClearURLs@kevinr.whiteList" = ""; + "extensions.Decentraleyes@ThomasRientjes.whiteList" = ""; + "extensions.FirefoxMulti-AccountContainers@mozilla.whiteList" = ""; + "extensions.TemporaryContainers@stoically.whiteList" = ""; + "extensions.autoDisableScopes" = 14; + "extensions.getAddons.cache.enabled" = false; + "extensions.getAddons.showPane" = false; + "extensions.pocket.enabled" = false; + "extensions.shield-recipe-client.api_url" = ""; + "extensions.shield-recipe-client.enabled" = false; + "extensions.webservice.discoverURL" = ""; + "media.autoplay.default" = 1; + "media.autoplay.enabled" = false; + "media.navigator.enabled" = false; + "media.peerconnection.enabled" = false; + "media.video_stats.enabled" = false; + "network.IDN_show_punycode" = true; + "network.allow-experiments" = false; + "network.captive-portal-service.enabled" = false; + "network.cookie.cookieBehavior" = 1; + "network.dns.disablePrefetch" = true; + "network.dns.disablePrefetchFromHTTPS" = true; + "network.http.referer.spoofSource" = true; + "network.http.speculative-parallel-limit" = 0; + "network.predictor.enable-prefetch" = false; + "network.predictor.enabled" = false; + "network.prefetch-next" = false; + "pdfjs.enableScripting" = false; + "privacy.donottrackheader.enabled" = true; + "privacy.donottrackheader.value" = 1; + "privacy.query_stripping" = true; + "privacy.trackingprotection.cryptomining.enabled" = true; + "privacy.trackingprotection.enabled" = true; + "privacy.trackingprotection.fingerprinting.enabled" = true; + "privacy.trackingprotection.pbmode.enabled" = true; + "privacy.usercontext.about_newtab_segregation.enabled" = true; + "security.ssl.disable_session_identifiers" = true; + "services.sync.prefs.sync.browser.newtabpage.activity-stream.showSponsoredTopSite" = false; + "signon.autofillForms" = false; + "toolkit.telemetry.archive.enabled" = false; + "toolkit.telemetry.bhrPing.enabled" = false; + "toolkit.telemetry.cachedClientID" = ""; + "toolkit.telemetry.enabled" = false; + "toolkit.telemetry.firstShutdownPing.enabled" = false; + "toolkit.telemetry.hybridContent.enabled" = false; + "toolkit.telemetry.newProfilePing.enabled" = false; + "toolkit.telemetry.prompted" = 2; + "toolkit.telemetry.rejected" = true; + "toolkit.telemetry.reportingpolicy.firstRun" = false; + "toolkit.telemetry.server" = ""; + "toolkit.telemetry.shutdownPingSender.enabled" = false; + "toolkit.telemetry.unified" = false; + "toolkit.telemetry.unifiedIsOptIn" = false; + "toolkit.telemetry.updatePing.enabled" = false; + "webgl.disabled" = true; + "webgl.renderer-string-override" = " "; + "webgl.vendor-string-override" = " "; - # set these to false if you're copying this config... - # it's to *enable* DRM, not disable it - "media.eme.enabled" = true; - "media.gmp-widevinecdm.enabled" = true; + # set these to false if you're copying this config... + # it's to *enable* DRM, not disable it + "media.eme.enabled" = true; + "media.gmp-widevinecdm.enabled" = true; + }; }; }; - }; - home.packages = lib.mkIf isLinux [ - pkgs.nekowinston-nur.sizzy - ]; - xdg.mimeApps.defaultApplications = { - "text/html" = "chromium.desktop"; - "x-scheme-handler/http" = "chromium.desktop"; - "x-scheme-handler/https" = "chromium.desktop"; - "x-scheme-handler/about" = "chromium.desktop"; - "x-scheme-handler/unknown" = "chromium.desktop"; + + home.packages = lib.mkIf isLinux [ + pkgs.nekowinston-nur.sizzy + ]; + + xdg.mimeApps.defaultApplications = { + "text/html" = "chromium.desktop"; + "x-scheme-handler/http" = "chromium.desktop"; + "x-scheme-handler/https" = "chromium.desktop"; + "x-scheme-handler/about" = "chromium.desktop"; + "x-scheme-handler/unknown" = "chromium.desktop"; + }; }; } diff --git a/home/apps/colorscheme-sync.nix b/home/apps/colorscheme-sync.nix index 68b8651..991f346 100644 --- a/home/apps/colorscheme-sync.nix +++ b/home/apps/colorscheme-sync.nix @@ -1,58 +1,61 @@ { config, + lib, pkgs, ... }: let # TODO: de-duplicate across modules lat = 48.210033; lng = 16.363449; - inherit (pkgs.stdenv) isLinux; + inherit (pkgs.stdenv) isDarwin isLinux; in { - home.packages = [ - (pkgs.writeShellApplication { - name = "dark-mode-ternary"; - runtimeInputs = [pkgs.gnugrep]; - text = let - queryCommand = - if pkgs.stdenv.isLinux - then "dbus-send --session --print-reply=literal --reply-timeout=5 --dest=org.freedesktop.portal.Desktop /org/freedesktop/portal/desktop org.freedesktop.portal.Settings.Read string:'org.freedesktop.appearance' string:'color-scheme' | grep -q 'uint32 1'" - else if pkgs.stdenv.isDarwin - then "defaults read -g AppleInterfaceStyle &>/dev/null" - else throw "Unsupported platform"; - in '' - [[ -z "''${1-}" ]] && [[ -z "''${2-}" ]] && echo "Usage: $0 " && exit 1 + config = lib.mkIf config.isGraphical { + home.packages = [ + (pkgs.writeShellApplication { + name = "dark-mode-ternary"; + runtimeInputs = [pkgs.gnugrep]; + text = let + queryCommand = + if isLinux + then "dbus-send --session --print-reply=literal --reply-timeout=5 --dest=org.freedesktop.portal.Desktop /org/freedesktop/portal/desktop org.freedesktop.portal.Settings.Read string:'org.freedesktop.appearance' string:'color-scheme' | grep -q 'uint32 1'" + else if isDarwin + then "defaults read -g AppleInterfaceStyle &>/dev/null" + else throw "Unsupported platform"; + in '' + [[ -z "''${1-}" ]] && [[ -z "''${2-}" ]] && echo "Usage: $0 " && exit 1 - if ${queryCommand}; then - echo "$1" - else - echo "$2" - fi - ''; - }) - ]; + if ${queryCommand}; then + echo "$1" + else + echo "$2" + fi + ''; + }) + ]; - services.darkman = let - starship = "${config.programs.starship.package}/bin/starship"; - zsh = "${config.programs.zsh.package}/bin/zsh"; - in { - enable = isLinux; - settings = { - inherit lat lng; - useGeoclue = false; - }; - darkModeScripts = { - toggle-shell = '' - ${starship} config palette catppuccin_mocha - ${zsh} -ic "fast-theme XDG:catppuccin-mocha" - ''; - }; - lightModeScripts = { - toggle-shell = '' - ${starship} config palette catppuccin_latte - ${zsh} -ic "fast-theme XDG:catppuccin-latte" - ''; + services.darkman = let + starship = "${config.programs.starship.package}/bin/starship"; + zsh = "${config.programs.zsh.package}/bin/zsh"; + in { + enable = isLinux; + settings = { + inherit lat lng; + useGeoclue = false; + }; + darkModeScripts = { + toggle-shell = '' + ${starship} config palette catppuccin_mocha + ${zsh} -ic "fast-theme XDG:catppuccin-mocha" + ''; + }; + lightModeScripts = { + toggle-shell = '' + ${starship} config palette catppuccin_latte + ${zsh} -ic "fast-theme XDG:catppuccin-latte" + ''; + }; }; + + programs.zsh.shellAliases.cat = "bat --theme=$(dark-mode-ternary 'Catppuccin-mocha' 'Catppuccin-latte')"; }; - - programs.zsh.shellAliases.cat = "bat --theme=$(dark-mode-ternary 'Catppuccin-mocha' 'Catppuccin-latte')"; } diff --git a/home/apps/default.nix b/home/apps/default.nix index 27c231c..8abb8b6 100644 --- a/home/apps/default.nix +++ b/home/apps/default.nix @@ -1,4 +1,8 @@ { + lib, + osConfig, + ... +}: { imports = [ ./browsers.nix ./colorscheme-sync.nix @@ -18,4 +22,10 @@ ./wezterm.nix ./zsh.nix ]; + + options.isGraphical = lib.mkOption { + default = osConfig.isGraphical; + description = "Whether the system is a graphical target"; + type = lib.types.bool; + }; } diff --git a/home/apps/discord.nix b/home/apps/discord.nix index 171d64b..185e60b 100644 --- a/home/apps/discord.nix +++ b/home/apps/discord.nix @@ -6,71 +6,73 @@ }: let inherit (pkgs.stdenv) isDarwin isLinux; in { - home.packages = with pkgs; [ - (discord.override { - withOpenASAR = true; - }) - ]; - home.activation.discordSettings = let - css = '' - @import url("https://catppuccin.github.io/discord/dist/catppuccin-frappe-pink.theme.css") (prefers-color-scheme: dark); - @import url("https://catppuccin.github.io/discord/dist/catppuccin-latte-pink.theme.css") (prefers-color-scheme: light); - @import url(//dablulite.github.io/css-snippets/ConsistentChatbar/import.css); + config = lib.mkIf config.isGraphical { + home.packages = with pkgs; [ + (discord.override { + withOpenASAR = true; + }) + ]; + home.activation.discordSettings = let + css = '' + @import url("https://catppuccin.github.io/discord/dist/catppuccin-frappe-pink.theme.css") (prefers-color-scheme: dark); + @import url("https://catppuccin.github.io/discord/dist/catppuccin-latte-pink.theme.css") (prefers-color-scheme: light); + @import url(//dablulite.github.io/css-snippets/ConsistentChatbar/import.css); - :root { - --font-primary: "IBM Plex Sans", sans-serif; - --font-headline: "IBM Plex Sans", sans-serif; - --font-display: "IBM Plex Sans", sans-serif; - --font-code: "Cascadia Code", "Symbols Nerd Font", mono; - } + :root { + --font-primary: "IBM Plex Sans", sans-serif; + --font-headline: "IBM Plex Sans", sans-serif; + --font-display: "IBM Plex Sans", sans-serif; + --font-code: "Cascadia Code", "Symbols Nerd Font", mono; + } - @media (max-width: 1024px) { - nav[aria-label="Servers sidebar"] { + @media (max-width: 1024px) { + nav[aria-label="Servers sidebar"] { + display: none; + } + .platform-osx div[class^="base_"] > div[class^="content_"] > div[class^="sidebar_"], + .platform-osx div[class^="base_"] > div[class^="content_"] > main[class^="container_"], + .platform-osx div[class^="base_"] > div[class^="content_"] > div[class^="chat_"] { + padding-top: 32px !important; + } + } + + @media (max-width: 768px) { + div[class^="base_"] > div[class^="content_"] > div[class^="sidebar_"] { + display: none; + } + } + + main[class^="chatContent_"] form div[class^="buttons_"], + main[class^="chatContent_"] form div[class^="attachWrapper_"] { display: none; } - .platform-osx div[class^="base_"] > div[class^="content_"] > div[class^="sidebar_"], - .platform-osx div[class^="base_"] > div[class^="content_"] > main[class^="container_"], - .platform-osx div[class^="base_"] > div[class^="content_"] > div[class^="chat_"] { - padding-top: 32px !important; - } - } - - @media (max-width: 768px) { - div[class^="base_"] > div[class^="content_"] > div[class^="sidebar_"] { - display: none; - } - } - - main[class^="chatContent_"] form div[class^="buttons_"], - main[class^="chatContent_"] form div[class^="attachWrapper_"] { - display: none; - } - ''; - json = pkgs.writeTextFile { - name = "discord-settings.json"; - text = - lib.generators.toJSON {} - { - DANGEROUS_ENABLE_DEVTOOLS_ONLY_ENABLE_IF_YOU_KNOW_WHAT_YOURE_DOING = true; - MIN_WIDTH = 0; - MIN_HEIGHT = 0; - openasar = { - inherit css; - setup = true; + ''; + json = pkgs.writeTextFile { + name = "discord-settings.json"; + text = + lib.generators.toJSON {} + { + DANGEROUS_ENABLE_DEVTOOLS_ONLY_ENABLE_IF_YOU_KNOW_WHAT_YOURE_DOING = true; + MIN_WIDTH = 0; + MIN_HEIGHT = 0; + openasar = { + inherit css; + setup = true; + }; + trayBalloonShown = false; + SKIP_HOST_UPDATE = true; }; - trayBalloonShown = false; - SKIP_HOST_UPDATE = true; - }; - }; - path = - if isLinux - then config.xdg.configHome + "/discord/settings.json" - else if isDarwin - then config.home.homeDirectory + "/Library/Application Support/discord/settings.json" - else throw "unsupported platform"; - in - lib.hm.dag.entryAfter ["writeBoundary"] '' - mkdir -p "$(dirname "${path}")" - cp -f "${json}" "${path}" - ''; + }; + path = + if isLinux + then config.xdg.configHome + "/discord/settings.json" + else if isDarwin + then config.home.homeDirectory + "/Library/Application Support/discord/settings.json" + else throw "unsupported platform"; + in + lib.hm.dag.entryAfter ["writeBoundary"] '' + mkdir -p "$(dirname "${path}")" + cp -f "${json}" "${path}" + ''; + }; } diff --git a/home/apps/fonts.nix b/home/apps/fonts.nix index d6f711c..2a5770b 100644 --- a/home/apps/fonts.nix +++ b/home/apps/fonts.nix @@ -4,24 +4,26 @@ pkgs, ... }: { - home.activation = { - installCustomFonts = let - fontDirectory = - if pkgs.stdenv.isDarwin - then "${config.home.homeDirectory}/Library/Fonts" - else "${config.xdg.dataHome}/fonts"; - fontPath = ../secrets/fonts; - in - lib.hm.dag.entryAfter ["writeBoundary"] '' - mkdir -p "${fontDirectory}" - install -Dm644 ${fontPath}/* "${fontDirectory}" - ''; + config = lib.mkIf config.isGraphical { + home.activation = { + installCustomFonts = let + fontDirectory = + if pkgs.stdenv.isDarwin + then "${config.home.homeDirectory}/Library/Fonts" + else "${config.xdg.dataHome}/fonts"; + fontPath = ../secrets/fonts; + in + lib.hm.dag.entryAfter ["writeBoundary"] '' + mkdir -p "${fontDirectory}" + install -Dm644 ${fontPath}/* "${fontDirectory}" + ''; + }; + home.packages = with pkgs; [ + (nerdfonts.override {fonts = ["NerdFontsSymbolsOnly"];}) + cascadia-code + victor-mono + ibm-plex + xkcd-font + ]; }; - home.packages = with pkgs; [ - (nerdfonts.override {fonts = ["NerdFontsSymbolsOnly"];}) - cascadia-code - victor-mono - ibm-plex - xkcd-font - ]; } diff --git a/home/apps/gpg.nix b/home/apps/gpg.nix index 03c1b84..bd05a20 100644 --- a/home/apps/gpg.nix +++ b/home/apps/gpg.nix @@ -1,4 +1,8 @@ -{pkgs, ...}: let +{ + config, + pkgs, + ... +}: let inherit (pkgs.stdenv.hostPlatform) isLinux isDarwin; key = "0x0B89BC45007EE9CC"; mailvelopeConfig = builtins.toJSON { @@ -97,6 +101,9 @@ in { enable = isLinux; enableExtraSocket = true; enableSshSupport = true; - pinentryFlavor = "gnome3"; + pinentryFlavor = + if config.isGraphical + then "gnome3" + else "curses"; }; } diff --git a/home/apps/gtk.nix b/home/apps/gtk.nix index d317c51..c46b6b2 100644 --- a/home/apps/gtk.nix +++ b/home/apps/gtk.nix @@ -4,49 +4,48 @@ pkgs, ... }: let - inherit (pkgs.stdenv) isLinux; + themeDir = "${config.gtk.theme.package}/share/themes/${config.gtk.theme.name}"; in { - home.pointerCursor = lib.mkIf isLinux { - name = "macOS-Monterey"; - package = pkgs.nur.repos.nekowinston.apple-cursor; - size = 24; - }; - gtk = lib.mkIf isLinux { - enable = true; - iconTheme = { - name = "Papirus-Dark"; - package = pkgs.catppuccin-papirus-folders.override { - flavor = "mocha"; - accent = "pink"; - }; + config = lib.mkIf (config.isGraphical && pkgs.stdenv.isLinux) { + home.pointerCursor = { + name = "macOS-Monterey"; + package = pkgs.nur.repos.nekowinston.apple-cursor; + size = 24; }; - theme = { - name = "Catppuccin-Mocha-Compact-Pink-Dark"; - package = pkgs.catppuccin-gtk.override { - accents = ["pink"]; - variant = "mocha"; - size = "compact"; - }; - }; - gtk2.configLocation = "${config.xdg.configHome}/gtk-2.0/gtkrc"; - gtk2.extraConfig = '' - gtk-xft-antialias=1 - gtk-xft-hinting=1 - gtk-xft-hintstyle="hintslight" - gtk-xft-rgba="rgb" - ''; - gtk3.extraConfig = { - gtk-xft-antialias = 1; - gtk-xft-hinting = 1; - gtk-xft-hintstyle = "hintslight"; - gtk-xft-rgba = "rgb"; - }; - }; - xdg = let - themeDir = "${config.gtk.theme.package}/share/themes/${config.gtk.theme.name}"; - in - lib.mkIf config.gtk.enable { + gtk = { + enable = true; + iconTheme = { + name = "Papirus-Dark"; + package = pkgs.catppuccin-papirus-folders.override { + flavor = "mocha"; + accent = "pink"; + }; + }; + theme = { + name = "Catppuccin-Mocha-Compact-Pink-Dark"; + package = pkgs.catppuccin-gtk.override { + accents = ["pink"]; + variant = "mocha"; + size = "compact"; + }; + }; + gtk2.configLocation = "${config.xdg.configHome}/gtk-2.0/gtkrc"; + gtk2.extraConfig = '' + gtk-xft-antialias=1 + gtk-xft-hinting=1 + gtk-xft-hintstyle="hintslight" + gtk-xft-rgba="rgb" + ''; + gtk3.extraConfig = { + gtk-xft-antialias = 1; + gtk-xft-hinting = 1; + gtk-xft-hintstyle = "hintslight"; + gtk-xft-rgba = "rgb"; + }; + }; + + xdg = { configFile."gtk-4.0/assets" = { source = "${themeDir}/gtk-4.0/assets"; recursive = true; @@ -54,4 +53,5 @@ in { configFile."gtk-4.0/gtk.css".source = "${themeDir}/gtk-4.0/gtk.css"; configFile."gtk-4.0/gtk-dark.css".source = "${themeDir}/gtk-4.0/gtk-dark.css"; }; + }; } diff --git a/home/apps/media.nix b/home/apps/media.nix index 957a20f..434b05f 100644 --- a/home/apps/media.nix +++ b/home/apps/media.nix @@ -1,27 +1,28 @@ { + config, lib, pkgs, ... }: let inherit (pkgs.stdenv.hostPlatform) isDarwin isLinux; in { - programs.imv = { - enable = isLinux; - }; - programs.mpv.enable = isLinux; - programs.zathura.enable = isLinux; + config = lib.mkIf config.isGraphical { + programs.imv.enable = isLinux; + programs.mpv.enable = isLinux; + programs.zathura.enable = isLinux; - home.packages = lib.mkIf isLinux [(pkgs.callPackage ../../pkgs/apple-music.nix {})]; + home.packages = lib.mkIf isLinux [(pkgs.callPackage ../../pkgs/apple-music.nix {})]; - services.discord-applemusic-rich-presence.enable = isDarwin; + services.discord-applemusic-rich-presence.enable = isDarwin; - xdg.mimeApps.defaultApplications = { - "application/pdf" = "zathura.desktop"; - "image/gif" = "imv.desktop"; - "image/jpeg" = "imv.desktop"; - "image/png" = "imv.desktop"; - "image/webp" = "imv.desktop"; - "video/mp4" = "mpv.desktop"; - "video/webm" = "mpv.desktop"; + xdg.mimeApps.defaultApplications = { + "application/pdf" = "zathura.desktop"; + "image/gif" = "imv.desktop"; + "image/jpeg" = "imv.desktop"; + "image/png" = "imv.desktop"; + "image/webp" = "imv.desktop"; + "video/mp4" = "mpv.desktop"; + "video/webm" = "mpv.desktop"; + }; }; } diff --git a/home/apps/rice.nix b/home/apps/rice.nix index 7d7b489..a6f2309 100644 --- a/home/apps/rice.nix +++ b/home/apps/rice.nix @@ -1,4 +1,5 @@ { + config, lib, pkgs, ... @@ -13,115 +14,117 @@ mauve = "#cba6f7"; }; in { - programs.i3status-rust = lib.mkIf isLinux { - enable = true; - bars.top = { - blocks = [ - { - block = "vpn"; - driver = "mullvad"; - format_connected = ""; - format_disconnected = ""; - state_connected = "good"; - state_disconnected = "critical"; - } - { - block = "tea_timer"; - done_cmd = "notify-send 'Timer Finished'"; - } - { - block = "time"; - interval = 60; - format = " $timestamp.datetime(f:'%d/%m %R') "; - } - { - block = "notify"; - format = " $icon {($notification_count.eng(w:1)) |}"; - driver = "swaync"; - click = [ - { - button = "left"; - action = "show"; - } - { - button = "right"; - action = "toggle_paused"; - } - ]; - } - ]; - settings = { - icons.icons = "material-nf"; - theme.overrides = { - idle_fg = ctp.text; - idle_bg = "#00000000"; - info_fg = "#89b4fa"; - info_bg = "#00000000"; - good_fg = "#a6e3a1"; - good_bg = "#00000000"; - warning_fg = "#fab387"; - warning_bg = "#00000000"; - critical_fg = "#f38ba8"; - critical_bg = "#00000000"; - separator = " "; - separator_bg = "auto"; - separator_fg = "auto"; + config = lib.mkIf config.isGraphical { + programs.i3status-rust = lib.mkIf isLinux { + enable = true; + bars.top = { + blocks = [ + { + block = "vpn"; + driver = "mullvad"; + format_connected = ""; + format_disconnected = ""; + state_connected = "good"; + state_disconnected = "critical"; + } + { + block = "tea_timer"; + done_cmd = "notify-send 'Timer Finished'"; + } + { + block = "time"; + interval = 60; + format = " $timestamp.datetime(f:'%d/%m %R') "; + } + { + block = "notify"; + format = " $icon {($notification_count.eng(w:1)) |}"; + driver = "swaync"; + click = [ + { + button = "left"; + action = "show"; + } + { + button = "right"; + action = "toggle_paused"; + } + ]; + } + ]; + settings = { + icons.icons = "material-nf"; + theme.overrides = { + idle_fg = ctp.text; + idle_bg = "#00000000"; + info_fg = "#89b4fa"; + info_bg = "#00000000"; + good_fg = "#a6e3a1"; + good_bg = "#00000000"; + warning_fg = "#fab387"; + warning_bg = "#00000000"; + critical_fg = "#f38ba8"; + critical_bg = "#00000000"; + separator = " "; + separator_bg = "auto"; + separator_fg = "auto"; + }; }; }; }; - }; - programs.rofi = lib.mkIf isLinux { - enable = true; - package = pkgs.rofi-wayland; - font = "IBM Plex Sans 14"; - extraConfig.icon-theme = "Papirus-Dark"; - terminal = "wezterm"; - theme = ./rofi/theme.rasi; - }; + programs.rofi = lib.mkIf isLinux { + enable = true; + package = pkgs.rofi-wayland; + font = "IBM Plex Sans 14"; + extraConfig.icon-theme = "Papirus-Dark"; + terminal = "wezterm"; + theme = ./rofi/theme.rasi; + }; - programs.swaylock = lib.mkIf isLinux { - enable = true; - package = pkgs.swaylock-effects; - settings = { - ignore-empty-password = false; - font = "IBM Plex Sans"; - fade-in = "0.2"; - screenshots = true; + programs.swaylock = lib.mkIf isLinux { + enable = true; + package = pkgs.swaylock-effects; + settings = { + ignore-empty-password = false; + font = "IBM Plex Sans"; + fade-in = "0.2"; + screenshots = true; - clock = true; - timestr = "%H:%M"; - datestr = "%A, %d %B"; + clock = true; + timestr = "%H:%M"; + datestr = "%A, %d %B"; - indicator = true; - indicator-radius = "100"; - indicator-thickness = "10"; + indicator = true; + indicator-radius = "100"; + indicator-thickness = "10"; - effect-blur = "30x2"; - effect-vignette = "0.5:0.5"; + effect-blur = "30x2"; + effect-vignette = "0.5:0.5"; - text-color = "cdd6f4"; - text-clear-color = "11111b"; - text-ver-color = "11111b"; - text-wrong-color = "11111b"; + text-color = "cdd6f4"; + text-clear-color = "11111b"; + text-ver-color = "11111b"; + text-wrong-color = "11111b"; - ring-color = "1e1e2e"; - key-hl-color = "f5c2e7"; - line-color = "f5c2e7"; - inside-color = "00000088"; - separator-color = "00000000"; + ring-color = "1e1e2e"; + key-hl-color = "f5c2e7"; + line-color = "f5c2e7"; + inside-color = "00000088"; + separator-color = "00000000"; - inside-clear-color = "f2cdcd88"; - line-clear-color = "f2cdcd"; - ring-clear-color = "f2cdcd"; + inside-clear-color = "f2cdcd88"; + line-clear-color = "f2cdcd"; + ring-clear-color = "f2cdcd"; - inside-ver-color = "89dceb88"; - line-ver-color = "89dceb"; - ring-ver-color = "89dceb"; + inside-ver-color = "89dceb88"; + line-ver-color = "89dceb"; + ring-ver-color = "89dceb"; - inside-wrong-color = "f38ba888"; - line-wrong-color = "f38ba8"; - ring-wrong-color = "f38ba8"; + inside-wrong-color = "f38ba888"; + line-wrong-color = "f38ba8"; + ring-wrong-color = "f38ba8"; + }; }; }; } diff --git a/home/apps/sway.nix b/home/apps/sway.nix index b3437aa..2560e4c 100644 --- a/home/apps/sway.nix +++ b/home/apps/sway.nix @@ -5,7 +5,6 @@ pkgs, ... }: let - inherit (pkgs.stdenv.hostPlatform) isLinux; fonts = { names = ["IBM Plex Sans" "Symbols Nerd Font"]; size = 12.0; @@ -21,38 +20,38 @@ lat = 48.210033; lng = 16.363449; in { - fonts.fontconfig.enable = true; + config = lib.mkIf (config.isGraphical && pkgs.stdenv.isLinux) { + fonts.fontconfig.enable = true; - home = lib.mkIf isLinux { - packages = with pkgs; [ - blueberry - kooha - libnotify - pavucontrol - sway-contrib.grimshot - swaynotificationcenter - wl-clipboard - ]; - }; - - services = lib.mkIf isLinux { - clipman.enable = true; - gnome-keyring = { - enable = true; - components = ["secrets"]; + home = { + packages = with pkgs; [ + blueberry + kooha + libnotify + pavucontrol + sway-contrib.grimshot + swaynotificationcenter + wl-clipboard + ]; }; - wlsunset = { - enable = true; - latitude = toString lat; - longitude = toString lng; - }; - udiskie.enable = true; - }; - wayland.windowManager.sway = let - modifier = "Mod4"; - in - lib.mkIf isLinux { + services = { + clipman.enable = true; + gnome-keyring = { + enable = true; + components = ["secrets"]; + }; + wlsunset = { + enable = true; + latitude = toString lat; + longitude = toString lng; + }; + udiskie.enable = true; + }; + + wayland.windowManager.sway = let + modifier = "Mod4"; + in { enable = true; package = null; config = rec { @@ -350,4 +349,5 @@ in { xdgAutostart = true; }; }; + }; } diff --git a/home/apps/vscode.nix b/home/apps/vscode.nix index a434088..e6a010f 100644 --- a/home/apps/vscode.nix +++ b/home/apps/vscode.nix @@ -11,7 +11,7 @@ keybindingsJSON = config.lib.file.mkOutOfStoreSymlink "${flakePath}/home/apps/vscode/keybindings.json"; in { programs.vscode = { - enable = true; + enable = config.isGraphical; extensions = with pkgs.vscode-marketplace; [ pkgs.vscode-extensions.valentjn.vscode-ltex adrianwilczynski.alpine-js-intellisense diff --git a/home/apps/wezterm.nix b/home/apps/wezterm.nix index 989ed47..38c8274 100644 --- a/home/apps/wezterm.nix +++ b/home/apps/wezterm.nix @@ -1,37 +1,47 @@ { config, flakePath, + lib, pkgs, ... }: let mkSymlink = path: config.lib.file.mkOutOfStoreSymlink "${flakePath}/home/apps/wezterm/${path}"; in { - programs.wezterm.enable = true; + # use the GUI version & config when we have a gui, else just get terminfo + config = lib.mkMerge [ + (lib.mkIf (!config.isGraphical) { + home.packages = [pkgs.wezterm.terminfo]; + }) - xdg.configFile = { - "wezterm/wezterm.lua".source = mkSymlink "wezterm.lua"; - "wezterm/config" = { - source = mkSymlink "config"; - recursive = true; - }; - "wezterm/bar".source = pkgs.fetchFromGitHub { - owner = "nekowinston"; - repo = "wezterm-bar"; - sha256 = "sha256-3acxqJ9HMA5hASWq/sVL9QQjfEw5Xrh2fT9nFuGjzHM="; - rev = "e96b81460b3ad11a7461934dcb7889ce5079f97f"; - }; - "wezterm/catppuccin".source = pkgs.fetchFromGitHub { - owner = "catppuccin"; - repo = "wezterm"; - sha256 = "sha256-McSWoZaJeK+oqdK/0vjiRxZGuLBpEB10Zg4+7p5dIGY="; - rev = "b1a81bae74d66eaae16457f2d8f151b5bd4fe5da"; - }; - }; + (lib.mkIf config.isGraphical { + programs.wezterm.enable = true; - programs.zsh.initExtra = '' - if [[ "$TERM_PROGRAM" == "WezTerm" ]]; then - TERM=wezterm - source ${config.programs.wezterm.package}/etc/profile.d/wezterm.sh - fi - ''; + xdg.configFile = { + "wezterm/wezterm.lua".source = mkSymlink "wezterm.lua"; + "wezterm/config" = { + source = mkSymlink "config"; + recursive = true; + }; + "wezterm/bar".source = pkgs.fetchFromGitHub { + owner = "nekowinston"; + repo = "wezterm-bar"; + sha256 = "sha256-3acxqJ9HMA5hASWq/sVL9QQjfEw5Xrh2fT9nFuGjzHM="; + rev = "e96b81460b3ad11a7461934dcb7889ce5079f97f"; + }; + "wezterm/catppuccin".source = pkgs.fetchFromGitHub { + owner = "catppuccin"; + repo = "wezterm"; + sha256 = "sha256-McSWoZaJeK+oqdK/0vjiRxZGuLBpEB10Zg4+7p5dIGY="; + rev = "b1a81bae74d66eaae16457f2d8f151b5bd4fe5da"; + }; + }; + + programs.zsh.initExtra = '' + if [[ "$TERM_PROGRAM" == "WezTerm" ]]; then + TERM=wezterm + source ${config.programs.wezterm.package}/etc/profile.d/wezterm.sh + fi + ''; + }) + ]; } diff --git a/home/default.nix b/home/default.nix index d7de4f6..5a7fea8 100644 --- a/home/default.nix +++ b/home/default.nix @@ -32,7 +32,7 @@ in { wakatime watchexec ] - ++ lib.optionals isLinux [ + ++ lib.optionals (config.isGraphical && isLinux) [ _1password-gui nekowinston-nur.uhk-agent ]); diff --git a/home/lib.nix b/home/lib.nix index 0ca63b4..e4a8516 100644 --- a/home/lib.nix +++ b/home/lib.nix @@ -21,6 +21,7 @@ then "/Users/${username}" else throw "Unsupported system"; home.username = username; + isGraphical = false; targets.genericLinux.enable = isLinux; xdg.mime.enable = isLinux; }; diff --git a/machines/common/shared/user.nix b/machines/common/shared/user.nix index 3b0dd63..82d1693 100644 --- a/machines/common/shared/user.nix +++ b/machines/common/shared/user.nix @@ -11,9 +11,9 @@ then "/home" else throw "Unsupported OS"; in { - users.users."${config.dotfiles.username}" = + users.users."${config.lib.dotfiles.username}" = { - home = "${homeRoot}/${config.dotfiles.username}"; + home = "${homeRoot}/${config.lib.dotfiles.username}"; openssh.authorizedKeys.keys = ["ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILm0O46zW/XfVOSwz0okRWYeOAg+wCVkCtCAoVTpZsOh"]; shell = pkgs.zsh; } diff --git a/machines/futomaki/default.nix b/machines/futomaki/default.nix index f8ef49b..9c3a1e2 100644 --- a/machines/futomaki/default.nix +++ b/machines/futomaki/default.nix @@ -25,7 +25,7 @@ virtualisation.podman.enable = true; virtualisation.libvirtd.enable = true; - users.users."${config.dotfiles.username}".extraGroups = ["libvirtd" "transmission"]; + users.users."${config.lib.dotfiles.username}".extraGroups = ["libvirtd" "transmission"]; environment.systemPackages = with pkgs; [ cabextract diff --git a/machines/lib.nix b/machines/lib.nix index 1d9ff97..0e09315 100644 --- a/machines/lib.nix +++ b/machines/lib.nix @@ -26,6 +26,7 @@ host, system, username, + isGraphical ? false, extraModules ? [], }: let ldTernary = l: d: @@ -46,12 +47,12 @@ modules = with inputs; [ { - options.dotfiles.username = with pkgs.lib; - mkOption { - description = "Main user of this configuration."; - type = types.str; - default = username; - }; + config.lib.dotfiles = {inherit username;}; + options.isGraphical = pkgs.lib.mkOption { + type = pkgs.lib.types.bool; + default = isGraphical; + description = "Whether the system is a isGraphical target"; + }; } ./common/shared ./common/${hostPlatform}