diff options
| author | Quentin Aristote <quentin@aristote.fr> | 2023-02-22 22:39:56 +0100 |
|---|---|---|
| committer | Quentin Aristote <quentin@aristote.fr> | 2023-02-28 17:47:49 +0100 |
| commit | 70d60e5ee6d1092f765807b8483c9c16d2afa678 (patch) | |
| tree | edeb7a91de348d6fc5dd0e43b9ca7bef794b322c /modules/home-manager/personal/programs | |
| parent | bbb2f5e7cefb970b3e4994ee51bb2c3a18a073c2 (diff) | |
add home-manager modules
Diffstat (limited to 'modules/home-manager/personal/programs')
10 files changed, 401 insertions, 0 deletions
diff --git a/modules/home-manager/personal/programs/alacritty.nix b/modules/home-manager/personal/programs/alacritty.nix new file mode 100644 index 0000000..afecfc9 --- /dev/null +++ b/modules/home-manager/personal/programs/alacritty.nix @@ -0,0 +1,21 @@ +{ config, lib, ... }: + +{ + programs.alacritty.settings = { + window = { + padding = { + x = 10; + y = 10; + }; + dimensions = { + lines = 75; + columns = 100; + }; + }; + + font = { size = 8.0; }; + }; + + xsession.windowManager.i3.config.terminal = lib.mkIf config.programs.alacritty.enable "alacritty"; +} + diff --git a/modules/home-manager/personal/programs/default.nix b/modules/home-manager/personal/programs/default.nix new file mode 100644 index 0000000..8b3ba16 --- /dev/null +++ b/modules/home-manager/personal/programs/default.nix @@ -0,0 +1,13 @@ +{ ... }: + +{ + imports = [ + ./alacritty.nix + ./direnv.nix + ./emacs.nix + ./firefox + ./git.nix + ./rofi.nix + ./thunderbird.nix + ]; +} diff --git a/modules/home-manager/personal/programs/direnv.nix b/modules/home-manager/personal/programs/direnv.nix new file mode 100644 index 0000000..7d87dc2 --- /dev/null +++ b/modules/home-manager/personal/programs/direnv.nix @@ -0,0 +1,31 @@ +{ config, lib, pkgs, ... }: + +let cfg = config.programs.direnv; +in { + programs.direnv.nix-direnv.enable = true; + + systemd.user = lib.mkIf cfg.enable + (pkgs.personal.lib.homeManager.serviceWithTimer "direnv-clean-update" { + Unit = { + Description = + "Remove old virtual environments and update the current ones"; + After = [ "network-online.target" ]; + }; + Service = { + Type = "oneshot"; + ExecSearchPath = + "${pkgs.coreutils}/bin:${pkgs.findutils}/bin:${pkgs.direnv}/bin:/bin/sh"; + WorkingDirectory = "${config.home.homeDirectory}"; + ExecStart = '' + find -type d -name .direnv \ + -execdir /bin/sh -c "rm -f .direnv/{nix,flake}-profile*" \; \ + -execdir direnv exec . true \; + ''; + }; + Timer = { + Persistent = true; + OnCalendar = "daily"; + }; + Install = { WantedBy = [ "default.target " ]; }; + }); +} diff --git a/modules/home-manager/personal/programs/emacs.nix b/modules/home-manager/personal/programs/emacs.nix new file mode 100644 index 0000000..2189541 --- /dev/null +++ b/modules/home-manager/personal/programs/emacs.nix @@ -0,0 +1,59 @@ +{ config, lib, pkgs, ... }: + +let + cfg = config.programs.emacs; + spacemacs-update-script = pkgs.callPackage ({ emacs, git }: + pkgs.writeShellApplication { + name = "spacemacs-update"; + + runtimeInputs = [ emacs git ]; + + text = '' + git checkout develop + git pull + git checkout local + git merge develop + emacs --fg-daemon=update-daemon \ + --eval '(progn + (configuration-layer/update-packages "no-confirmation") + (spacemacs/kill-emacs))' + ''; + }) { emacs = cfg.package; }; +in { + config = lib.mkIf cfg.enable { + services.emacs = { + enable = lib.mkDefault true; + client.enable = lib.mkDefault true; + startWithUserSession = lib.mkDefault true; + }; + home.sessionVariables.EDITOR = "emacsclient --create-frame"; + + # add some packages necessary in spacemacs + programs.emacs.extraPackages = + lib.mkDefault (ep: with ep; [ emacsql-sqlite emacsql-sqlite3 ]); + home.packages = with pkgs; [ gnutar source-code-pro ]; + + # spacemacs dotfile + home.file.".spacemacs.d/init.el".source = + lib.mkDefault config.personal.home.dotfiles.spacemacs; + + # service to update spacemacs + systemd.user = + (pkgs.personal.lib.homeManager.serviceWithTimer "spacemacs-update" { + Unit = { + Description = "Update Spacemacs by pulling the develop branch"; + After = [ "network-online.target" "emacs.service" ]; + }; + Service = { + Type = "oneshot"; + WorkingDirectory = "${config.home.homeDirectory}/.emacs.d/"; + ExecStart = "${spacemacs-update-script}"; + }; + Timer = { + Persistent = true; + OnCalendar = "daily"; + }; + Install = { WantedBy = [ "default.target" ]; }; + }); + }; +} diff --git a/modules/home-manager/personal/programs/firefox/default.nix b/modules/home-manager/personal/programs/firefox/default.nix new file mode 100644 index 0000000..1e97c40 --- /dev/null +++ b/modules/home-manager/personal/programs/firefox/default.nix @@ -0,0 +1,139 @@ +{ config, lib, pkgs, ... }: + +with lib; +let + cfg = config.personal.firefox; + userjs = pkgs.callPackage ./userjs.nix { + inherit (pkgs.personal) arkenfoxUserJS; + inherit (pkgs.lib.personal) toUserJS; + }; + engines = import ./engines.nix; + userchrome-treestyletabs = '' + /* Hide main tabs toolbar */ + #TabsToolbar { + visibility: collapse; + } + /* Sidebar min and max width removal */ + #sidebar { + max-width: none !important; + min-width: 0px !important; + } + /* Hide sidebar header, when using Tree Style Tab. */ + #sidebar-box[sidebarcommand="treestyletab_piro_sakura_ne_jp-sidebar-action"] #sidebar-header { + visibility: collapse; + } + ''; + extensions = with pkgs.personal; [ + canvasblocker + clearurls + darkreader + neat-url + redirector + smart-referer + temporary-containers + tree-style-tab + ublock-origin + unpaywall + url-in-title + ]; + webappsWithIds = (builtins.foldl' ({ counter, value }: + { name, ... }@next: { + counter = counter + 1; + value = value ++ [ + (next // { + id = counter; + profileName = lib.toLower name; + }) + ]; + }) { + counter = 0; + value = [ ]; + } cfg.webapps).value; +in { + options.personal.firefox = { + webapps = lib.mkOption { + type = with lib.types; + listOf (submodule { + options = let mkTypedOption = type: lib.mkOption { inherit type; }; + in { + name = mkTypedOption str; + genericName = mkTypedOption str // { default = ""; }; + url = mkTypedOption str; + comment = mkTypedOption str // { default = ""; }; + extraUserJS = mkTypedOption lines // { default = ""; }; + categories = mkTypedOption (listOf str) // { default = [ ]; }; + icon = mkTypedOption path; + }; + }); + default = [ ]; + }; + }; + + config = lib.mkMerge [ + { + programs.firefox.profiles = builtins.foldl' (prev: + { name, id, profileName, extraUserJS, ... }: + prev // { + "${profileName}" = { + inherit extensions; + id = id + 2; + extraConfig = userjs.streaming + extraUserJS; + }; + }) { + default = { + inherit extensions; + id = 0; # isDefault = true + + extraConfig = userjs.default; + userChrome = userchrome-treestyletabs; + search = { + force = lib.mkDefault true; + engines = { + inherit (engines) Searx; + "Bing".metaData.hidden = true; + "Google".metaData.hidden = true; + "Amazon.fr".metaData.hidden = true; + }; + default = "Searx"; + order = [ "Searx" "Wikipedia" ]; + }; + }; + + videoconferencing = { + inherit extensions; + id = 1; + + extraConfig = userjs.videoconferencing; + userChrome = userchrome-treestyletabs; + }; + } webappsWithIds; + } + + (lib.mkIf config.programs.firefox.enable { + xdg.desktopEntries = let + firefoxProfilesDir = "${config.home.homeDirectory}/.mozilla/firefox"; + firefoxInProfile = profile: + '' + ${config.programs.firefox.package}/bin/firefox --profile "${firefoxProfilesDir}/${profile}"''; + in builtins.foldl' (prev: + { name, profileName, url, genericName, icon, comment, categories, ... }: + prev // { + "${profileName}" = { + inherit name genericName icon comment categories; + exec = "${firefoxInProfile profileName} ${url}"; + }; + }) { + videoconferences = { + name = "Video Conferences"; + genericName = "Video conference"; + comment = "Use video conferencing software in a browser."; + exec = "${firefoxInProfile "videoconferencing"}"; + categories = [ "Network" "VideoConference" ]; + }; + } webappsWithIds; + + home.shellAliases.fftmp = "firefox --profile $(mktemp -d)"; + home.sessionVariables.BROWSER = "firefox"; + }) + ]; +} diff --git a/modules/home-manager/personal/programs/firefox/engines.nix b/modules/home-manager/personal/programs/firefox/engines.nix new file mode 100644 index 0000000..7ea2830 --- /dev/null +++ b/modules/home-manager/personal/programs/firefox/engines.nix @@ -0,0 +1,8 @@ +{ + Searx = { + urls = [{ template = "https://searx.aristote.fr/search?q={searchTerms}"; }]; + iconUpdateURL = + "https://searx.aristote.fr/static/themes/oscar/img/favicon.png"; + updateInterval = 24 * 60 * 60 * 1000; # every day + }; +} diff --git a/modules/home-manager/personal/programs/firefox/userjs.nix b/modules/home-manager/personal/programs/firefox/userjs.nix new file mode 100644 index 0000000..ee105b3 --- /dev/null +++ b/modules/home-manager/personal/programs/firefox/userjs.nix @@ -0,0 +1,66 @@ +{ arkenfoxUserJS, toUserJS }: + +rec { + arkenfox = builtins.readFile "${arkenfoxUserJS}"; + default = arkenfox + toUserJS { + "keyword.enabled" = true; # 0801 + "signon.rememberSignons" = false; # 0901 + "security.nocertdb" = true; # 1222 + "media.peerconnection.enabled" = false; # 2001 + "media.peerconnection.ice.no_host" = true; # 2004 + "dom.allow_cut_copy" = true; # 2404 + "dom.battery.enabled" = false; # 2502 + "permissions.default.xr" = 2; # 2521 + "privacy.clearOnShutdown.siteSettings" = true; # 2811 + + # Personal + ## Warnings + "browser.tabs.warnOnClose" = false; + "browser.tabs.warnOnCloseOtherTabs" = false; + ## Updates + "app.update.auto" = false; + "browser.search.update" = false; + ## Appearance + "toolkit.legacyUserProfileCustomizations.stylesheets" = true; + ## Content behavior + "clipboard.autocopy" = false; + ## UX behavior + "browser.quitShortcut.disabled" = true; + "browser.tabs.closeWindowWithLastTab" = false; + ## UX features + "extensions.pocket.enabled" = false; + "identity.fxaccounts.enabled" = false; + }; + + streaming = default + toUserJS { + # Widevine (DRMs) + "media.gmp-widevinecdm.enabled" = true; + "media.eme.enabled" = true; + # Cache + "browser.cache.disk.enable" = true; + "browser.cache.offline.storage" = true; + # Privacy + "privacy.clearOnShutdown.cache" = false; + "privacy.clearOnShutdown.cookies" = false; + "privacy.clearOnShutdown.siteSettings" = false; + "privacy.clearOnShutdown.offlineApps" = false; + "privacy.resistFingerprinting" = false; # Netflix is whining + }; + + videoconferencing = default + toUserJS { + # IMPORTANT: uncheck "Prevent WebRTC from leaking local IP addresses" in uBlock Origin's settings + # NOTE: if using RFP (4501) + # some sites, e.g. Zoom, need a canvas site exception [Right Click>View Page Info>Permissions] + # Discord video does not work: it thinks you are FF78: use a separate profile or spoof the user agent + "media.peerconnection.enabled" = true; + "media.peerconnection.ice.no_host" = false; # may or may not be required + "webgl.disabled" = false; # required for Zoom + "webgl.min_capability_mode" = false; + "media.getusermedia.screensharing.enabled" = true; # optional + "media.autoplay.blocking_policy" = + 0; # optional (otherwise add site exceptions) + "javascript.options.wasm" = + true; # optional (some platforms may require this) + "dom.webaudio.enabled" = true; + }; +} diff --git a/modules/home-manager/personal/programs/git.nix b/modules/home-manager/personal/programs/git.nix new file mode 100644 index 0000000..5d272dc --- /dev/null +++ b/modules/home-manager/personal/programs/git.nix @@ -0,0 +1,21 @@ +{ lib, pkgs, ... }: + +{ + programs.git = { + userName = lib.mkDefault "Quentin Aristote"; + userEmail = lib.mkDefault "quentin@aristote.fr"; + + ignores = builtins.map builtins.readFile + (with pkgs.personal; [ emacsGitignore linuxGitignore direnvGitignore ]) + ++ [ + # Personal rules + '' + # Nix + shell.nix + .nix-gc-roots + .tmp + result + '' + ]; + }; +} diff --git a/modules/home-manager/personal/programs/rofi.nix b/modules/home-manager/personal/programs/rofi.nix new file mode 100644 index 0000000..141339c --- /dev/null +++ b/modules/home-manager/personal/programs/rofi.nix @@ -0,0 +1,8 @@ +{ config, lib, ... }: + +{ + programs.rofi = { + cycle = lib.mkDefault true; + theme = lib.mkDefault config.personal.home.dotfiles.rofi; + }; +} diff --git a/modules/home-manager/personal/programs/thunderbird.nix b/modules/home-manager/personal/programs/thunderbird.nix new file mode 100644 index 0000000..c3450af --- /dev/null +++ b/modules/home-manager/personal/programs/thunderbird.nix @@ -0,0 +1,35 @@ +{ config, lib, pkgs, ... }: + +let + configDefault = builtins.readFile "${pkgs.personal.thunderbirdUserJS}" + + pkgs.lib.personal.toUserJS { + # 0391 + "mail.bii.alert.show_preview" = false; + # 0610 + "browser.send_pings" = false; + # 5004 + "permissions.memory_only" = false; + # 5016 + "browser.download.folderList" = 1; + # 9000 + "app.update.auto" = false; + # 9131 + "extensions.cardbook.useOnlyEmail" = false; + # 9312 + "calendar.timezone.local" = "Europe/Paris"; + }; + profiles = { + all = { }; + personal = { }; + work = { }; + }; +in { + config = lib.mkMerge [ + { programs.thunderbird = { inherit profiles; }; } + (lib.mkIf config.programs.thunderbird.enable { + home.file = lib.concatMapAttrs + (name: _: { ".thunderbird/${name}/user.js".text = configDefault; }) + profiles; + }) + ]; +} |
