feat: add isGraphical target option

This commit is contained in:
winston 2023-11-28 12:21:17 +01:00
parent 4ac4130f5e
commit d9cbfc07dc
Signed by: winston
GPG key ID: 3786770EDBC2B481
18 changed files with 546 additions and 498 deletions

View file

@ -31,16 +31,19 @@
system = "aarch64-darwin"; system = "aarch64-darwin";
username = "winston"; username = "winston";
extraModules = [inputs.nekowinston-nur.darwinModules.default]; extraModules = [inputs.nekowinston-nur.darwinModules.default];
isGraphical = true;
} }
{ {
host = "futomaki"; host = "futomaki";
system = "x86_64-linux"; system = "x86_64-linux";
username = "winston"; username = "winston";
isGraphical = true;
} }
{ {
host = "bento"; host = "bento";
system = "x86_64-linux"; system = "x86_64-linux";
username = "w"; username = "w";
isGraphical = true;
} }
]; ];
imports = [inputs.pre-commit-hooks.flakeModule]; imports = [inputs.pre-commit-hooks.flakeModule];

View file

@ -1,165 +1,170 @@
{ {
config,
lib, lib,
pkgs, pkgs,
... ...
}: let }: let
inherit (pkgs.stdenv.hostPlatform) isLinux; inherit (pkgs.stdenv) isLinux;
in { in {
programs.chromium = { config = lib.mkIf config.isGraphical {
enable = true; programs.chromium = {
package = pkgs.ungoogled-chromium; enable = isLinux;
}; package = pkgs.ungoogled-chromium;
};
programs.firefox = { programs.firefox = {
enable = isLinux; enable = isLinux;
profiles.default = { profiles.default = {
search.default = "DuckDuckGo"; search.default = "DuckDuckGo";
search.force = true; search.force = true;
extensions = with pkgs.nur.repos.rycee.firefox-addons; [ extensions = with pkgs.nur.repos.rycee.firefox-addons; [
bitwarden bitwarden
clearurls clearurls
darkreader darkreader
decentraleyes decentraleyes
i-dont-care-about-cookies i-dont-care-about-cookies
languagetool languagetool
mailvelope mailvelope
multi-account-containers multi-account-containers
onepassword-password-manager onepassword-password-manager
refined-github refined-github
temporary-containers temporary-containers
ublock-origin ublock-origin
vimium vimium
]; ];
settings = { settings = {
"app.normandy.api_url" = ""; "app.normandy.api_url" = "";
"app.normandy.enabled" = false; "app.normandy.enabled" = false;
"app.shield.optoutstudies.enabled" = false; "app.shield.optoutstudies.enabled" = false;
"app.update.auto" = false; "app.update.auto" = false;
"beacon.enabled" = false; "beacon.enabled" = false;
"breakpad.reportURL" = ""; "breakpad.reportURL" = "";
"browser.aboutConfig.showWarning" = false; "browser.aboutConfig.showWarning" = false;
"browser.cache.offline.enable" = false; "browser.cache.offline.enable" = false;
"browser.crashReports.unsubmittedCheck.autoSubmit" = false; "browser.crashReports.unsubmittedCheck.autoSubmit" = false;
"browser.crashReports.unsubmittedCheck.autoSubmit2" = false; "browser.crashReports.unsubmittedCheck.autoSubmit2" = false;
"browser.crashReports.unsubmittedCheck.enabled" = false; "browser.crashReports.unsubmittedCheck.enabled" = false;
"browser.disableResetPrompt" = true; "browser.disableResetPrompt" = true;
"browser.formfill.enable" = false; "browser.formfill.enable" = false;
"browser.newtab.preload" = false; "browser.newtab.preload" = false;
"browser.newtabpage.activity-stream.section.highlights.includePocket" = false; "browser.newtabpage.activity-stream.section.highlights.includePocket" = false;
"browser.newtabpage.enabled" = false; "browser.newtabpage.enabled" = false;
"browser.newtabpage.enhanced" = false; "browser.newtabpage.enhanced" = false;
"browser.newtabpage.introShown" = true; "browser.newtabpage.introShown" = true;
"browser.quitShortcut.disabled" = true; "browser.quitShortcut.disabled" = true;
"browser.safebrowsing.appRepURL" = ""; "browser.safebrowsing.appRepURL" = "";
"browser.safebrowsing.blockedURIs.enabled" = false; "browser.safebrowsing.blockedURIs.enabled" = false;
"browser.safebrowsing.downloads.enabled" = false; "browser.safebrowsing.downloads.enabled" = false;
"browser.safebrowsing.downloads.remote.enabled" = false; "browser.safebrowsing.downloads.remote.enabled" = false;
"browser.safebrowsing.downloads.remote.url" = ""; "browser.safebrowsing.downloads.remote.url" = "";
"browser.safebrowsing.enabled" = false; "browser.safebrowsing.enabled" = false;
"browser.safebrowsing.malware.enabled" = false; "browser.safebrowsing.malware.enabled" = false;
"browser.safebrowsing.phishing.enabled" = false; "browser.safebrowsing.phishing.enabled" = false;
"browser.selfsupport.url" = ""; "browser.selfsupport.url" = "";
"browser.send_pings" = false; "browser.send_pings" = false;
"browser.sessionstore.privacy_level" = 0; "browser.sessionstore.privacy_level" = 0;
"browser.shell.checkDefaultBrowser" = false; "browser.shell.checkDefaultBrowser" = false;
"browser.startup.homepage_override.mstone" = "ignore"; "browser.startup.homepage_override.mstone" = "ignore";
"browser.tabs.crashReporting.sendReport" = false; "browser.tabs.crashReporting.sendReport" = false;
"browser.tabs.firefox-view" = false; "browser.tabs.firefox-view" = false;
"browser.urlbar.groupLabels.enabled" = false; "browser.urlbar.groupLabels.enabled" = false;
"browser.urlbar.quicksuggest.enabled" = false; "browser.urlbar.quicksuggest.enabled" = false;
"browser.urlbar.speculativeConnect.enabled" = false; "browser.urlbar.speculativeConnect.enabled" = false;
"browser.urlbar.trimURLs" = false; "browser.urlbar.trimURLs" = false;
"browser.warnOnQuitShortcut" = false; "browser.warnOnQuitShortcut" = false;
"datareporting.healthreport.service.enabled" = false; "datareporting.healthreport.service.enabled" = false;
"datareporting.healthreport.uploadEnabled" = false; "datareporting.healthreport.uploadEnabled" = false;
"datareporting.policy.dataSubmissionEnabled" = false; "datareporting.policy.dataSubmissionEnabled" = false;
"device.sensors.ambientLight.enabled" = false; "device.sensors.ambientLight.enabled" = false;
"device.sensors.enabled" = false; "device.sensors.enabled" = false;
"device.sensors.motion.enabled" = false; "device.sensors.motion.enabled" = false;
"device.sensors.orientation.enabled" = false; "device.sensors.orientation.enabled" = false;
"device.sensors.proximity.enabled" = false; "device.sensors.proximity.enabled" = false;
"dom.battery.enabled" = false; "dom.battery.enabled" = false;
"dom.security.https_only_mode" = true; "dom.security.https_only_mode" = true;
"dom.security.https_only_mode_ever_enabled" = true; "dom.security.https_only_mode_ever_enabled" = true;
"dom.webaudio.enabled" = false; "dom.webaudio.enabled" = false;
"experiments.activeExperiment" = false; "experiments.activeExperiment" = false;
"experiments.enabled" = false; "experiments.enabled" = false;
"experiments.manifest.uri" = ""; "experiments.manifest.uri" = "";
"experiments.supported" = false; "experiments.supported" = false;
"extensions.CanvasBlocker@kkapsner.de.whiteList" = ""; "extensions.CanvasBlocker@kkapsner.de.whiteList" = "";
"extensions.ClearURLs@kevinr.whiteList" = ""; "extensions.ClearURLs@kevinr.whiteList" = "";
"extensions.Decentraleyes@ThomasRientjes.whiteList" = ""; "extensions.Decentraleyes@ThomasRientjes.whiteList" = "";
"extensions.FirefoxMulti-AccountContainers@mozilla.whiteList" = ""; "extensions.FirefoxMulti-AccountContainers@mozilla.whiteList" = "";
"extensions.TemporaryContainers@stoically.whiteList" = ""; "extensions.TemporaryContainers@stoically.whiteList" = "";
"extensions.autoDisableScopes" = 14; "extensions.autoDisableScopes" = 14;
"extensions.getAddons.cache.enabled" = false; "extensions.getAddons.cache.enabled" = false;
"extensions.getAddons.showPane" = false; "extensions.getAddons.showPane" = false;
"extensions.pocket.enabled" = false; "extensions.pocket.enabled" = false;
"extensions.shield-recipe-client.api_url" = ""; "extensions.shield-recipe-client.api_url" = "";
"extensions.shield-recipe-client.enabled" = false; "extensions.shield-recipe-client.enabled" = false;
"extensions.webservice.discoverURL" = ""; "extensions.webservice.discoverURL" = "";
"media.autoplay.default" = 1; "media.autoplay.default" = 1;
"media.autoplay.enabled" = false; "media.autoplay.enabled" = false;
"media.navigator.enabled" = false; "media.navigator.enabled" = false;
"media.peerconnection.enabled" = false; "media.peerconnection.enabled" = false;
"media.video_stats.enabled" = false; "media.video_stats.enabled" = false;
"network.IDN_show_punycode" = true; "network.IDN_show_punycode" = true;
"network.allow-experiments" = false; "network.allow-experiments" = false;
"network.captive-portal-service.enabled" = false; "network.captive-portal-service.enabled" = false;
"network.cookie.cookieBehavior" = 1; "network.cookie.cookieBehavior" = 1;
"network.dns.disablePrefetch" = true; "network.dns.disablePrefetch" = true;
"network.dns.disablePrefetchFromHTTPS" = true; "network.dns.disablePrefetchFromHTTPS" = true;
"network.http.referer.spoofSource" = true; "network.http.referer.spoofSource" = true;
"network.http.speculative-parallel-limit" = 0; "network.http.speculative-parallel-limit" = 0;
"network.predictor.enable-prefetch" = false; "network.predictor.enable-prefetch" = false;
"network.predictor.enabled" = false; "network.predictor.enabled" = false;
"network.prefetch-next" = false; "network.prefetch-next" = false;
"pdfjs.enableScripting" = false; "pdfjs.enableScripting" = false;
"privacy.donottrackheader.enabled" = true; "privacy.donottrackheader.enabled" = true;
"privacy.donottrackheader.value" = 1; "privacy.donottrackheader.value" = 1;
"privacy.query_stripping" = true; "privacy.query_stripping" = true;
"privacy.trackingprotection.cryptomining.enabled" = true; "privacy.trackingprotection.cryptomining.enabled" = true;
"privacy.trackingprotection.enabled" = true; "privacy.trackingprotection.enabled" = true;
"privacy.trackingprotection.fingerprinting.enabled" = true; "privacy.trackingprotection.fingerprinting.enabled" = true;
"privacy.trackingprotection.pbmode.enabled" = true; "privacy.trackingprotection.pbmode.enabled" = true;
"privacy.usercontext.about_newtab_segregation.enabled" = true; "privacy.usercontext.about_newtab_segregation.enabled" = true;
"security.ssl.disable_session_identifiers" = true; "security.ssl.disable_session_identifiers" = true;
"services.sync.prefs.sync.browser.newtabpage.activity-stream.showSponsoredTopSite" = false; "services.sync.prefs.sync.browser.newtabpage.activity-stream.showSponsoredTopSite" = false;
"signon.autofillForms" = false; "signon.autofillForms" = false;
"toolkit.telemetry.archive.enabled" = false; "toolkit.telemetry.archive.enabled" = false;
"toolkit.telemetry.bhrPing.enabled" = false; "toolkit.telemetry.bhrPing.enabled" = false;
"toolkit.telemetry.cachedClientID" = ""; "toolkit.telemetry.cachedClientID" = "";
"toolkit.telemetry.enabled" = false; "toolkit.telemetry.enabled" = false;
"toolkit.telemetry.firstShutdownPing.enabled" = false; "toolkit.telemetry.firstShutdownPing.enabled" = false;
"toolkit.telemetry.hybridContent.enabled" = false; "toolkit.telemetry.hybridContent.enabled" = false;
"toolkit.telemetry.newProfilePing.enabled" = false; "toolkit.telemetry.newProfilePing.enabled" = false;
"toolkit.telemetry.prompted" = 2; "toolkit.telemetry.prompted" = 2;
"toolkit.telemetry.rejected" = true; "toolkit.telemetry.rejected" = true;
"toolkit.telemetry.reportingpolicy.firstRun" = false; "toolkit.telemetry.reportingpolicy.firstRun" = false;
"toolkit.telemetry.server" = ""; "toolkit.telemetry.server" = "";
"toolkit.telemetry.shutdownPingSender.enabled" = false; "toolkit.telemetry.shutdownPingSender.enabled" = false;
"toolkit.telemetry.unified" = false; "toolkit.telemetry.unified" = false;
"toolkit.telemetry.unifiedIsOptIn" = false; "toolkit.telemetry.unifiedIsOptIn" = false;
"toolkit.telemetry.updatePing.enabled" = false; "toolkit.telemetry.updatePing.enabled" = false;
"webgl.disabled" = true; "webgl.disabled" = true;
"webgl.renderer-string-override" = " "; "webgl.renderer-string-override" = " ";
"webgl.vendor-string-override" = " "; "webgl.vendor-string-override" = " ";
# set these to false if you're copying this config... # set these to false if you're copying this config...
# it's to *enable* DRM, not disable it # it's to *enable* DRM, not disable it
"media.eme.enabled" = true; "media.eme.enabled" = true;
"media.gmp-widevinecdm.enabled" = true; "media.gmp-widevinecdm.enabled" = true;
};
}; };
}; };
};
home.packages = lib.mkIf isLinux [ home.packages = lib.mkIf isLinux [
pkgs.nekowinston-nur.sizzy pkgs.nekowinston-nur.sizzy
]; ];
xdg.mimeApps.defaultApplications = {
"text/html" = "chromium.desktop"; xdg.mimeApps.defaultApplications = {
"x-scheme-handler/http" = "chromium.desktop"; "text/html" = "chromium.desktop";
"x-scheme-handler/https" = "chromium.desktop"; "x-scheme-handler/http" = "chromium.desktop";
"x-scheme-handler/about" = "chromium.desktop"; "x-scheme-handler/https" = "chromium.desktop";
"x-scheme-handler/unknown" = "chromium.desktop"; "x-scheme-handler/about" = "chromium.desktop";
"x-scheme-handler/unknown" = "chromium.desktop";
};
}; };
} }

View file

@ -1,58 +1,61 @@
{ {
config, config,
lib,
pkgs, pkgs,
... ...
}: let }: let
# TODO: de-duplicate across modules # TODO: de-duplicate across modules
lat = 48.210033; lat = 48.210033;
lng = 16.363449; lng = 16.363449;
inherit (pkgs.stdenv) isLinux; inherit (pkgs.stdenv) isDarwin isLinux;
in { in {
home.packages = [ config = lib.mkIf config.isGraphical {
(pkgs.writeShellApplication { home.packages = [
name = "dark-mode-ternary"; (pkgs.writeShellApplication {
runtimeInputs = [pkgs.gnugrep]; name = "dark-mode-ternary";
text = let runtimeInputs = [pkgs.gnugrep];
queryCommand = text = let
if pkgs.stdenv.isLinux queryCommand =
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'" if isLinux
else if pkgs.stdenv.isDarwin 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'"
then "defaults read -g AppleInterfaceStyle &>/dev/null" else if isDarwin
else throw "Unsupported platform"; then "defaults read -g AppleInterfaceStyle &>/dev/null"
in '' else throw "Unsupported platform";
[[ -z "''${1-}" ]] && [[ -z "''${2-}" ]] && echo "Usage: $0 <dark> <light>" && exit 1 in ''
[[ -z "''${1-}" ]] && [[ -z "''${2-}" ]] && echo "Usage: $0 <dark> <light>" && exit 1
if ${queryCommand}; then if ${queryCommand}; then
echo "$1" echo "$1"
else else
echo "$2" echo "$2"
fi fi
''; '';
}) })
]; ];
services.darkman = let services.darkman = let
starship = "${config.programs.starship.package}/bin/starship"; starship = "${config.programs.starship.package}/bin/starship";
zsh = "${config.programs.zsh.package}/bin/zsh"; zsh = "${config.programs.zsh.package}/bin/zsh";
in { in {
enable = isLinux; enable = isLinux;
settings = { settings = {
inherit lat lng; inherit lat lng;
useGeoclue = false; useGeoclue = false;
}; };
darkModeScripts = { darkModeScripts = {
toggle-shell = '' toggle-shell = ''
${starship} config palette catppuccin_mocha ${starship} config palette catppuccin_mocha
${zsh} -ic "fast-theme XDG:catppuccin-mocha" ${zsh} -ic "fast-theme XDG:catppuccin-mocha"
''; '';
}; };
lightModeScripts = { lightModeScripts = {
toggle-shell = '' toggle-shell = ''
${starship} config palette catppuccin_latte ${starship} config palette catppuccin_latte
${zsh} -ic "fast-theme XDG: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')";
} }

View file

@ -1,4 +1,8 @@
{ {
lib,
osConfig,
...
}: {
imports = [ imports = [
./browsers.nix ./browsers.nix
./colorscheme-sync.nix ./colorscheme-sync.nix
@ -18,4 +22,10 @@
./wezterm.nix ./wezterm.nix
./zsh.nix ./zsh.nix
]; ];
options.isGraphical = lib.mkOption {
default = osConfig.isGraphical;
description = "Whether the system is a graphical target";
type = lib.types.bool;
};
} }

View file

@ -6,71 +6,73 @@
}: let }: let
inherit (pkgs.stdenv) isDarwin isLinux; inherit (pkgs.stdenv) isDarwin isLinux;
in { in {
home.packages = with pkgs; [ config = lib.mkIf config.isGraphical {
(discord.override { home.packages = with pkgs; [
withOpenASAR = true; (discord.override {
}) withOpenASAR = true;
]; })
home.activation.discordSettings = let ];
css = '' home.activation.discordSettings = let
@import url("https://catppuccin.github.io/discord/dist/catppuccin-frappe-pink.theme.css") (prefers-color-scheme: dark); css = ''
@import url("https://catppuccin.github.io/discord/dist/catppuccin-latte-pink.theme.css") (prefers-color-scheme: light); @import url("https://catppuccin.github.io/discord/dist/catppuccin-frappe-pink.theme.css") (prefers-color-scheme: dark);
@import url(//dablulite.github.io/css-snippets/ConsistentChatbar/import.css); @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 { :root {
--font-primary: "IBM Plex Sans", sans-serif; --font-primary: "IBM Plex Sans", sans-serif;
--font-headline: "IBM Plex Sans", sans-serif; --font-headline: "IBM Plex Sans", sans-serif;
--font-display: "IBM Plex Sans", sans-serif; --font-display: "IBM Plex Sans", sans-serif;
--font-code: "Cascadia Code", "Symbols Nerd Font", mono; --font-code: "Cascadia Code", "Symbols Nerd Font", mono;
} }
@media (max-width: 1024px) { @media (max-width: 1024px) {
nav[aria-label="Servers sidebar"] { 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; display: none;
} }
.platform-osx div[class^="base_"] > div[class^="content_"] > div[class^="sidebar_"], '';
.platform-osx div[class^="base_"] > div[class^="content_"] > main[class^="container_"], json = pkgs.writeTextFile {
.platform-osx div[class^="base_"] > div[class^="content_"] > div[class^="chat_"] { name = "discord-settings.json";
padding-top: 32px !important; text =
} lib.generators.toJSON {}
} {
DANGEROUS_ENABLE_DEVTOOLS_ONLY_ENABLE_IF_YOU_KNOW_WHAT_YOURE_DOING = true;
@media (max-width: 768px) { MIN_WIDTH = 0;
div[class^="base_"] > div[class^="content_"] > div[class^="sidebar_"] { MIN_HEIGHT = 0;
display: none; openasar = {
} inherit css;
} setup = true;
};
main[class^="chatContent_"] form div[class^="buttons_"], trayBalloonShown = false;
main[class^="chatContent_"] form div[class^="attachWrapper_"] { SKIP_HOST_UPDATE = true;
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;
}; };
trayBalloonShown = false; };
SKIP_HOST_UPDATE = true; path =
}; if isLinux
}; then config.xdg.configHome + "/discord/settings.json"
path = else if isDarwin
if isLinux then config.home.homeDirectory + "/Library/Application Support/discord/settings.json"
then config.xdg.configHome + "/discord/settings.json" else throw "unsupported platform";
else if isDarwin in
then config.home.homeDirectory + "/Library/Application Support/discord/settings.json" lib.hm.dag.entryAfter ["writeBoundary"] ''
else throw "unsupported platform"; mkdir -p "$(dirname "${path}")"
in cp -f "${json}" "${path}"
lib.hm.dag.entryAfter ["writeBoundary"] '' '';
mkdir -p "$(dirname "${path}")" };
cp -f "${json}" "${path}"
'';
} }

View file

@ -4,24 +4,26 @@
pkgs, pkgs,
... ...
}: { }: {
home.activation = { config = lib.mkIf config.isGraphical {
installCustomFonts = let home.activation = {
fontDirectory = installCustomFonts = let
if pkgs.stdenv.isDarwin fontDirectory =
then "${config.home.homeDirectory}/Library/Fonts" if pkgs.stdenv.isDarwin
else "${config.xdg.dataHome}/fonts"; then "${config.home.homeDirectory}/Library/Fonts"
fontPath = ../secrets/fonts; else "${config.xdg.dataHome}/fonts";
in fontPath = ../secrets/fonts;
lib.hm.dag.entryAfter ["writeBoundary"] '' in
mkdir -p "${fontDirectory}" lib.hm.dag.entryAfter ["writeBoundary"] ''
install -Dm644 ${fontPath}/* "${fontDirectory}" 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
];
} }

View file

@ -1,4 +1,8 @@
{pkgs, ...}: let {
config,
pkgs,
...
}: let
inherit (pkgs.stdenv.hostPlatform) isLinux isDarwin; inherit (pkgs.stdenv.hostPlatform) isLinux isDarwin;
key = "0x0B89BC45007EE9CC"; key = "0x0B89BC45007EE9CC";
mailvelopeConfig = builtins.toJSON { mailvelopeConfig = builtins.toJSON {
@ -97,6 +101,9 @@ in {
enable = isLinux; enable = isLinux;
enableExtraSocket = true; enableExtraSocket = true;
enableSshSupport = true; enableSshSupport = true;
pinentryFlavor = "gnome3"; pinentryFlavor =
if config.isGraphical
then "gnome3"
else "curses";
}; };
} }

View file

@ -4,49 +4,48 @@
pkgs, pkgs,
... ...
}: let }: let
inherit (pkgs.stdenv) isLinux; themeDir = "${config.gtk.theme.package}/share/themes/${config.gtk.theme.name}";
in { in {
home.pointerCursor = lib.mkIf isLinux { config = lib.mkIf (config.isGraphical && pkgs.stdenv.isLinux) {
name = "macOS-Monterey"; home.pointerCursor = {
package = pkgs.nur.repos.nekowinston.apple-cursor; name = "macOS-Monterey";
size = 24; 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";
};
}; };
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 gtk = {
themeDir = "${config.gtk.theme.package}/share/themes/${config.gtk.theme.name}"; enable = true;
in iconTheme = {
lib.mkIf config.gtk.enable { 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" = { configFile."gtk-4.0/assets" = {
source = "${themeDir}/gtk-4.0/assets"; source = "${themeDir}/gtk-4.0/assets";
recursive = true; 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.css".source = "${themeDir}/gtk-4.0/gtk.css";
configFile."gtk-4.0/gtk-dark.css".source = "${themeDir}/gtk-4.0/gtk-dark.css"; configFile."gtk-4.0/gtk-dark.css".source = "${themeDir}/gtk-4.0/gtk-dark.css";
}; };
};
} }

View file

@ -1,27 +1,28 @@
{ {
config,
lib, lib,
pkgs, pkgs,
... ...
}: let }: let
inherit (pkgs.stdenv.hostPlatform) isDarwin isLinux; inherit (pkgs.stdenv.hostPlatform) isDarwin isLinux;
in { in {
programs.imv = { config = lib.mkIf config.isGraphical {
enable = isLinux; programs.imv.enable = isLinux;
}; programs.mpv.enable = isLinux;
programs.mpv.enable = isLinux; programs.zathura.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 = { xdg.mimeApps.defaultApplications = {
"application/pdf" = "zathura.desktop"; "application/pdf" = "zathura.desktop";
"image/gif" = "imv.desktop"; "image/gif" = "imv.desktop";
"image/jpeg" = "imv.desktop"; "image/jpeg" = "imv.desktop";
"image/png" = "imv.desktop"; "image/png" = "imv.desktop";
"image/webp" = "imv.desktop"; "image/webp" = "imv.desktop";
"video/mp4" = "mpv.desktop"; "video/mp4" = "mpv.desktop";
"video/webm" = "mpv.desktop"; "video/webm" = "mpv.desktop";
};
}; };
} }

View file

@ -1,4 +1,5 @@
{ {
config,
lib, lib,
pkgs, pkgs,
... ...
@ -13,115 +14,117 @@
mauve = "#cba6f7"; mauve = "#cba6f7";
}; };
in { in {
programs.i3status-rust = lib.mkIf isLinux { config = lib.mkIf config.isGraphical {
enable = true; programs.i3status-rust = lib.mkIf isLinux {
bars.top = { enable = true;
blocks = [ bars.top = {
{ blocks = [
block = "vpn"; {
driver = "mullvad"; block = "vpn";
format_connected = ""; driver = "mullvad";
format_disconnected = ""; format_connected = "";
state_connected = "good"; format_disconnected = "";
state_disconnected = "critical"; state_connected = "good";
} state_disconnected = "critical";
{ }
block = "tea_timer"; {
done_cmd = "notify-send 'Timer Finished'"; block = "tea_timer";
} done_cmd = "notify-send 'Timer Finished'";
{ }
block = "time"; {
interval = 60; block = "time";
format = " $timestamp.datetime(f:'%d/%m %R') "; interval = 60;
} format = " $timestamp.datetime(f:'%d/%m %R') ";
{ }
block = "notify"; {
format = " $icon {($notification_count.eng(w:1)) |}"; block = "notify";
driver = "swaync"; format = " $icon {($notification_count.eng(w:1)) |}";
click = [ driver = "swaync";
{ click = [
button = "left"; {
action = "show"; button = "left";
} action = "show";
{ }
button = "right"; {
action = "toggle_paused"; button = "right";
} action = "toggle_paused";
]; }
} ];
]; }
settings = { ];
icons.icons = "material-nf"; settings = {
theme.overrides = { icons.icons = "material-nf";
idle_fg = ctp.text; theme.overrides = {
idle_bg = "#00000000"; idle_fg = ctp.text;
info_fg = "#89b4fa"; idle_bg = "#00000000";
info_bg = "#00000000"; info_fg = "#89b4fa";
good_fg = "#a6e3a1"; info_bg = "#00000000";
good_bg = "#00000000"; good_fg = "#a6e3a1";
warning_fg = "#fab387"; good_bg = "#00000000";
warning_bg = "#00000000"; warning_fg = "#fab387";
critical_fg = "#f38ba8"; warning_bg = "#00000000";
critical_bg = "#00000000"; critical_fg = "#f38ba8";
separator = " "; critical_bg = "#00000000";
separator_bg = "auto"; separator = " ";
separator_fg = "auto"; separator_bg = "auto";
separator_fg = "auto";
};
}; };
}; };
}; };
};
programs.rofi = lib.mkIf isLinux { programs.rofi = lib.mkIf isLinux {
enable = true; enable = true;
package = pkgs.rofi-wayland; package = pkgs.rofi-wayland;
font = "IBM Plex Sans 14"; font = "IBM Plex Sans 14";
extraConfig.icon-theme = "Papirus-Dark"; extraConfig.icon-theme = "Papirus-Dark";
terminal = "wezterm"; terminal = "wezterm";
theme = ./rofi/theme.rasi; theme = ./rofi/theme.rasi;
}; };
programs.swaylock = lib.mkIf isLinux { programs.swaylock = lib.mkIf isLinux {
enable = true; enable = true;
package = pkgs.swaylock-effects; package = pkgs.swaylock-effects;
settings = { settings = {
ignore-empty-password = false; ignore-empty-password = false;
font = "IBM Plex Sans"; font = "IBM Plex Sans";
fade-in = "0.2"; fade-in = "0.2";
screenshots = true; screenshots = true;
clock = true; clock = true;
timestr = "%H:%M"; timestr = "%H:%M";
datestr = "%A, %d %B"; datestr = "%A, %d %B";
indicator = true; indicator = true;
indicator-radius = "100"; indicator-radius = "100";
indicator-thickness = "10"; indicator-thickness = "10";
effect-blur = "30x2"; effect-blur = "30x2";
effect-vignette = "0.5:0.5"; effect-vignette = "0.5:0.5";
text-color = "cdd6f4"; text-color = "cdd6f4";
text-clear-color = "11111b"; text-clear-color = "11111b";
text-ver-color = "11111b"; text-ver-color = "11111b";
text-wrong-color = "11111b"; text-wrong-color = "11111b";
ring-color = "1e1e2e"; ring-color = "1e1e2e";
key-hl-color = "f5c2e7"; key-hl-color = "f5c2e7";
line-color = "f5c2e7"; line-color = "f5c2e7";
inside-color = "00000088"; inside-color = "00000088";
separator-color = "00000000"; separator-color = "00000000";
inside-clear-color = "f2cdcd88"; inside-clear-color = "f2cdcd88";
line-clear-color = "f2cdcd"; line-clear-color = "f2cdcd";
ring-clear-color = "f2cdcd"; ring-clear-color = "f2cdcd";
inside-ver-color = "89dceb88"; inside-ver-color = "89dceb88";
line-ver-color = "89dceb"; line-ver-color = "89dceb";
ring-ver-color = "89dceb"; ring-ver-color = "89dceb";
inside-wrong-color = "f38ba888"; inside-wrong-color = "f38ba888";
line-wrong-color = "f38ba8"; line-wrong-color = "f38ba8";
ring-wrong-color = "f38ba8"; ring-wrong-color = "f38ba8";
};
}; };
}; };
} }

View file

@ -5,7 +5,6 @@
pkgs, pkgs,
... ...
}: let }: let
inherit (pkgs.stdenv.hostPlatform) isLinux;
fonts = { fonts = {
names = ["IBM Plex Sans" "Symbols Nerd Font"]; names = ["IBM Plex Sans" "Symbols Nerd Font"];
size = 12.0; size = 12.0;
@ -21,38 +20,38 @@
lat = 48.210033; lat = 48.210033;
lng = 16.363449; lng = 16.363449;
in { in {
fonts.fontconfig.enable = true; config = lib.mkIf (config.isGraphical && pkgs.stdenv.isLinux) {
fonts.fontconfig.enable = true;
home = lib.mkIf isLinux { home = {
packages = with pkgs; [ packages = with pkgs; [
blueberry blueberry
kooha kooha
libnotify libnotify
pavucontrol pavucontrol
sway-contrib.grimshot sway-contrib.grimshot
swaynotificationcenter swaynotificationcenter
wl-clipboard wl-clipboard
]; ];
};
services = lib.mkIf isLinux {
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 services = {
modifier = "Mod4"; clipman.enable = true;
in gnome-keyring = {
lib.mkIf isLinux { 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; enable = true;
package = null; package = null;
config = rec { config = rec {
@ -350,4 +349,5 @@ in {
xdgAutostart = true; xdgAutostart = true;
}; };
}; };
};
} }

View file

@ -11,7 +11,7 @@
keybindingsJSON = config.lib.file.mkOutOfStoreSymlink "${flakePath}/home/apps/vscode/keybindings.json"; keybindingsJSON = config.lib.file.mkOutOfStoreSymlink "${flakePath}/home/apps/vscode/keybindings.json";
in { in {
programs.vscode = { programs.vscode = {
enable = true; enable = config.isGraphical;
extensions = with pkgs.vscode-marketplace; [ extensions = with pkgs.vscode-marketplace; [
pkgs.vscode-extensions.valentjn.vscode-ltex pkgs.vscode-extensions.valentjn.vscode-ltex
adrianwilczynski.alpine-js-intellisense adrianwilczynski.alpine-js-intellisense

View file

@ -1,37 +1,47 @@
{ {
config, config,
flakePath, flakePath,
lib,
pkgs, pkgs,
... ...
}: let }: let
mkSymlink = path: config.lib.file.mkOutOfStoreSymlink "${flakePath}/home/apps/wezterm/${path}"; mkSymlink = path: config.lib.file.mkOutOfStoreSymlink "${flakePath}/home/apps/wezterm/${path}";
in { 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 = { (lib.mkIf config.isGraphical {
"wezterm/wezterm.lua".source = mkSymlink "wezterm.lua"; programs.wezterm.enable = true;
"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 = '' xdg.configFile = {
if [[ "$TERM_PROGRAM" == "WezTerm" ]]; then "wezterm/wezterm.lua".source = mkSymlink "wezterm.lua";
TERM=wezterm "wezterm/config" = {
source ${config.programs.wezterm.package}/etc/profile.d/wezterm.sh source = mkSymlink "config";
fi 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
'';
})
];
} }

View file

@ -32,7 +32,7 @@ in {
wakatime wakatime
watchexec watchexec
] ]
++ lib.optionals isLinux [ ++ lib.optionals (config.isGraphical && isLinux) [
_1password-gui _1password-gui
nekowinston-nur.uhk-agent nekowinston-nur.uhk-agent
]); ]);

View file

@ -21,6 +21,7 @@
then "/Users/${username}" then "/Users/${username}"
else throw "Unsupported system"; else throw "Unsupported system";
home.username = username; home.username = username;
isGraphical = false;
targets.genericLinux.enable = isLinux; targets.genericLinux.enable = isLinux;
xdg.mime.enable = isLinux; xdg.mime.enable = isLinux;
}; };

View file

@ -11,9 +11,9 @@
then "/home" then "/home"
else throw "Unsupported OS"; else throw "Unsupported OS";
in { 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"]; openssh.authorizedKeys.keys = ["ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILm0O46zW/XfVOSwz0okRWYeOAg+wCVkCtCAoVTpZsOh"];
shell = pkgs.zsh; shell = pkgs.zsh;
} }

View file

@ -25,7 +25,7 @@
virtualisation.podman.enable = true; virtualisation.podman.enable = true;
virtualisation.libvirtd.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; [ environment.systemPackages = with pkgs; [
cabextract cabextract

View file

@ -26,6 +26,7 @@
host, host,
system, system,
username, username,
isGraphical ? false,
extraModules ? [], extraModules ? [],
}: let }: let
ldTernary = l: d: ldTernary = l: d:
@ -46,12 +47,12 @@
modules = with inputs; modules = with inputs;
[ [
{ {
options.dotfiles.username = with pkgs.lib; config.lib.dotfiles = {inherit username;};
mkOption { options.isGraphical = pkgs.lib.mkOption {
description = "Main user of this configuration."; type = pkgs.lib.types.bool;
type = types.str; default = isGraphical;
default = username; description = "Whether the system is a isGraphical target";
}; };
} }
./common/shared ./common/shared
./common/${hostPlatform} ./common/${hostPlatform}