summaryrefslogtreecommitdiffstats
path: root/jeschli/2configs
diff options
context:
space:
mode:
Diffstat (limited to 'jeschli/2configs')
m---------jeschli/2configs/elisp0
-rw-r--r--jeschli/2configs/emacs-org-agenda.nix20
-rw-r--r--jeschli/2configs/emacs.nix321
-rw-r--r--jeschli/2configs/firefox.nix15
-rw-r--r--jeschli/2configs/haskell.nix18
-rw-r--r--jeschli/2configs/i3.nix3
-rw-r--r--jeschli/2configs/overlays/firefox-with-config.nix488
-rw-r--r--jeschli/2configs/own-pkgs/audio-fingerprint-defender/default.nix40
-rw-r--r--jeschli/2configs/own-pkgs/canvas-fingerprint-defender/default.nix40
-rw-r--r--jeschli/2configs/own-pkgs/dark-reader/default.nix28
-rw-r--r--jeschli/2configs/own-pkgs/font-fingerprint-defender/default.nix40
-rw-r--r--jeschli/2configs/own-pkgs/hopper/default.nix45
-rw-r--r--jeschli/2configs/own-pkgs/https-everywhere/default.nix29
-rw-r--r--jeschli/2configs/own-pkgs/pyocclient/default.nix26
-rw-r--r--jeschli/2configs/own-pkgs/rmount/default.nix34
-rw-r--r--jeschli/2configs/own-pkgs/ublock-origin/default.nix28
-rw-r--r--jeschli/2configs/own-pkgs/user-agent-switcher/default.nix40
-rw-r--r--jeschli/2configs/own-pkgs/webgl-fingerprint-defender/default.nix40
-rw-r--r--jeschli/2configs/own-pkgs/wl-clipboard/default.nix25
-rw-r--r--jeschli/2configs/rust.nix1
20 files changed, 129 insertions, 1152 deletions
diff --git a/jeschli/2configs/elisp b/jeschli/2configs/elisp
new file mode 160000
+Subproject 279d6a01f5abbab5d28d3a57549b7fec800a510
diff --git a/jeschli/2configs/emacs-org-agenda.nix b/jeschli/2configs/emacs-org-agenda.nix
index 79540977..0420dc43 100644
--- a/jeschli/2configs/emacs-org-agenda.nix
+++ b/jeschli/2configs/emacs-org-agenda.nix
@@ -114,29 +114,29 @@ let
("NEXT" ("WAITING") ("CANCELLED") ("HOLD"))
("DONE" ("WAITING") ("CANCELLED") ("HOLD")))))
-(setq org-directory "~/git/org")
-(setq org-default-notes-file "~/git/org/refile.org")
+(setq org-directory "~/projects/notes_privat")
+(setq org-default-notes-file "~/projects/notes_privat/refile.org")
;; I use C-c c to start capture mode
(global-set-key (kbd "C-c c") 'org-capture)
;; Capture templates for: TODO tasks, Notes, appointments, phone calls, meetings, and org-protocol
(setq org-capture-templates
- (quote (("t" "todo" entry (file "~/git/org/refile.org")
+ (quote (("t" "todo" entry (file org-default-notes-file)
"* TODO %?\n%U\n%a\n" :clock-in t :clock-resume t)
- ("r" "respond" entry (file "~/git/org/refile.org")
+ ("r" "respond" entry (file org-default-notes-file)
"* NEXT Respond to %:from on %:subject\nSCHEDULED: %t\n%U\n%a\n" :clock-in t :clock-resume t :immediate-finish t)
- ("n" "note" entry (file "~/git/org/refile.org")
+ ("n" "note" entry (file org-default-notes-file)
"* %? :NOTE:\n%U\n%a\n" :clock-in t :clock-resume t)
("j" "Journal" entry (file+datetree "~/git/org/diary.org")
"* %?\n%U\n" :clock-in t :clock-resume t)
- ("w" "org-protocol" entry (file "~/git/org/refile.org")
+ ("w" "org-protocol" entry (file org-default-notes-file)
"* TODO Review %c\n%U\n" :immediate-finish t)
- ("m" "Meeting" entry (file "~/git/org/refile.org")
+ ("m" "Meeting" entry (file org-default-notes-file)
"* MEETING with %? :MEETING:\n%U" :clock-in t :clock-resume t)
- ("p" "Phone call" entry (file "~/git/org/refile.org")
+ ("p" "Phone call" entry (file org-default-notes-file)
"* PHONE %? :PHONE:\n%U" :clock-in t :clock-resume t)
- ("h" "Habit" entry (file "~/git/org/refile.org")
+ ("h" "Habit" entry (file org-default-notes-file)
"* NEXT %?\n%U\n%a\nSCHEDULED: %(format-time-string \"%<<%Y-%m-%d %a .+1d/3d>>\")\n:PROPERTIES:\n:STYLE: habit\n:REPEAT_TO_STATE: NEXT\n:END:\n"))))
;; Remove empty LOGBOOK drawers on clock out
@@ -144,7 +144,7 @@ let
(interactive)
(save-excursion
(beginning-of-line 0)
- (org-remove-empty-drawer-at "LOGBOOK" (point))))
+ (org-remove-empty-drawer-at (point))))
(add-hook 'org-clock-out-hook 'bh/remove-empty-drawer-on-clock-out 'append)
diff --git a/jeschli/2configs/emacs.nix b/jeschli/2configs/emacs.nix
index 46354bd6..5c35bc28 100644
--- a/jeschli/2configs/emacs.nix
+++ b/jeschli/2configs/emacs.nix
@@ -4,245 +4,116 @@ let
pkgsWithOverlay = import <nixpkgs-unstable> {
overlays = [
(import (builtins.fetchTarball {
- url = https://github.com/nix-community/emacs-overlay/archive/master.tar.gz;
+ url = https://github.com/nix-community/emacs-overlay/archive/403c14c23be188b58c0b1bc197b428041d8a0cea.tar.gz;
}))
];
};
- orgAgendaView = import ./emacs-org-agenda.nix;
-
- packageRepos = ''
- (require 'package) ;; You might already have this line
- (let* ((no-ssl (and (memq system-type '(windows-nt ms-dos))
- (not (gnutls-available-p))))
- (url (concat (if no-ssl "http" "https") "://melpa.org/packages/")))
- (add-to-list 'package-archives (cons "melpa" url) t)
- (add-to-list 'package-archives
- '("org" . "http://orgmode.org/elpa/") t)
- )
- (when (< emacs-major-version 24)
- ;; For important compatibility libraries like cl-lib
- (add-to-list 'package-archives '("gnu" . "http://elpa.gnu.org/packages/")))
- (package-initialize)
- '';
-
- evilMode = ''
- ;; Evil Mode
- (require 'evil)
- (evil-mode 1)
- ;; (require 'evil-org)
- ;; (add-hook 'org-mode-hook 'evil-org-mode)
- ;; (evil-org-set-key-theme '(navigation insert textobjects additional calendar))
- ;; (require 'evil-org-agenda)
- ;; (evil-org-agenda-set-keys)
- '';
-
- goMode = ''
- (setq godoc-and-godef-command "go doc") ;godoc has no cli support any more, thats go doc now
- (add-to-list 'exec-path "~/go/bin")
- (add-hook 'go-mode-hook
- (lambda ()
- (setq-default)
- (setq tab-width 2)
- (setq standard-indent 2)
- (setq indent-tabs-mode nil)))
- '';
-
- ido = ''
- (require 'ido)
- (ido-mode t)
- '';
-
- helm = ''
- (helm-mode 1)
- (global-set-key (kbd "M-x") #'helm-M-x)
- (global-set-key (kbd "C-x r b") #'helm-filtered-bookmarks)
- (global-set-key (kbd "C-x C-f") #'helm-find-files)
- '';
-
- magit = ''
- (global-set-key (kbd "C-x g") 'magit-status) ; "Most Magit commands are commonly invoked from the status buffer"
-
- (with-eval-after-load 'magit
- (require 'forge))
- '';
-
- windowCosmetics = ''
- (menu-bar-mode -1)
- (tool-bar-mode -1) ; Disable the button bar atop screen
- (scroll-bar-mode -1) ; Disable scroll bar
- (toggle-scroll-bar -1)
- (setq inhibit-startup-screen t) ; Disable startup screen with graphics
- (setq-default indent-tabs-mode nil) ; Use spaces instead of tabs
- (setq default-tab-width 2) ; Two spaces is a tab
- (setq tab-width 2) ; Four spaces is a tab
- (setq visible-bell nil) ; Disable annoying visual bell graphic
- (setq ring-bell-function 'ignore) ; Disable super annoying audio bell
- '';
-
- orgMode = ''
- (add-to-list 'auto-mode-alist '("\\.\\(org\\|org_archive\\|txt\\)$" . org-mode))
- (global-set-key "\C-cl" 'org-store-link)
- (global-set-key "\C-ca" 'org-agenda)
- (global-set-key "\C-cb" 'org-iswitchb)
- (global-set-key "\C-c L" 'org-insert-link-global)
- (global-set-key "\C-c o" 'org-open-at-point-global)
- (setq org-link-frame-setup '((file . find-file))) ; open link in same frame.
- (if (boundp 'org-user-agenda-files)
- (setq org-agenda-files org-user-agenda-files)
- (setq org-agenda-files (quote ("~/projects/notes_privat")))
- )
- '';
-
- theme = ''
- (load-theme 'monokai-alt t)
- (load-theme 'whiteboard t)
- (disable-theme 'monokai-alt)
- (disable-theme 'whiteboard)
-
- (defun mh/load-whiteboard-theme ()
- "load whiteboard theme"
- (interactive)
- (message "whiteboard loaded")
- (disable-theme 'monokai-alt)
- (enable-theme 'whiteboard)
- )
-
- (defun mh/load-monokai-theme ()
- "load monokai theme"
- (interactive)
- (message "monokai loaded")
- (disable-theme 'whiteboard)
- (enable-theme 'monokai-alt)
- )
-
- (global-set-key "\C-ctw" 'mh/load-whiteboard-theme)
- (global-set-key "\C-ctm" 'mh/load-monokai-theme)
- '';
-
- # Configuration for rust development
- # inspired by
- # https://github.com/bbatsov/prelude/blob/master/modules/prelude-rust.el
- #
- # This requires rls and racer to be installed on the system
- rustDevelopment = ''
- (add-hook 'rust-mode-hook #'racer-mode)
- (add-hook 'rust-mode-hook (lambda()
- (local-set-key (kbd "C-c C-d") 'racer-describe)
- (local-set-key (kbd "C-c .") 'racer-find-definition)
- (local-set-key (kbd "C-c ,") 'pop-tag-mark))
- )
- (add-hook 'racer-mode-hook #'eldoc-mode)
- (add-hook 'racer-mode-hook #'company-mode)
- (require 'rust-mode)
- (define-key rust-mode-map (kbd "TAB") #'company-indent-or-complete-common)
- (setq company-tooltip-align-annotations t)
- '';
-
- recentFiles = ''
- (recentf-mode 1)
- (setq recentf-max-menu-items 25)
- (global-set-key "\C-x\ \C-r" 'recentf-open-files)
- '';
-
- myFunctionKeys = ''
- (fset 'kill-actual-buffer
- [?\C-x ?k return])
-
- (defun mh/open-term-and-rename (name)
- "open a new bash and rename it"
- (interactive "sName of new terminal: ")
- (term "/run/current-system/sw/bin/bash")
- (rename-buffer name)
- )
- (global-set-key (kbd "M-<f8>") 'kill-actual-buffer)
-
- (global-set-key (kbd "<f5>") 'mh/open-term-and-rename)
- (global-set-key (kbd "<f6>") 'other-window)
- (global-set-key (kbd "<f7>") 'split-window-right)
- (global-set-key (kbd "<f8>") 'delete-other-windows)
- '';
-
- dotEmacs = pkgs.writeText "dot-emacs" ''
- ${packageRepos}
-
- ${evilMode}
- ${goMode}
- ${helm}
- ${magit}
- ${orgMode}
- ${rustDevelopment}
- ${theme}
- ${windowCosmetics}
-
- ${orgAgendaView}
- ${myFunctionKeys}
- '';
-
- #emacsWithCustomPackages
- emacsPkgs= epkgs: [
- #testing
- epkgs.melpaPackages.web-mode
- epkgs.melpaPackages.js2-mode
- epkgs.melpaPackages.xref-js2
-
- epkgs.melpaPackages.academic-phrases
-
- epkgs.melpaPackages.gitlab
- epkgs.melpaPackages.forge
- epkgs.melpaPackages.helm
- epkgs.melpaPackages.weechat
-
-# emacs convenience
- epkgs.melpaPackages.ag
- epkgs.melpaPackages.company
- epkgs.melpaPackages.direnv
- epkgs.melpaPackages.evil
- epkgs.melpaPackages.google-this
- epkgs.melpaPackages.monokai-alt-theme
-
-# development
- epkgs.melpaPackages.magit
- epkgs.melpaPackages.nix-mode
- epkgs.melpaPackages.go-mode
- epkgs.melpaPackages.haskell-mode
-# rust
- epkgs.melpaPackages.rust-mode
- epkgs.melpaPackages.flycheck-rust
- epkgs.melpaPackages.racer
-
-# python
- epkgs.melpaPackages.elpy
-
-# org-mode
- epkgs.elpaPackages.bbdb
- epkgs.orgPackages.org-plus-contrib
- epkgs.melpaPackages.smex
- epkgs.melpaPackages.org-mime
-
- epkgs.elpaPackages.which-key
- ];
-emacsWithOverlay = (pkgsWithOverlay.emacsWithPackagesFromUsePackage {
- config = builtins.readFile dotEmacs; # builtins.readFile ./emacs.el;
- # Package is optional, defaults to pkgs.emacs
- package = pkgsWithOverlay.emacsGit;
- # Optionally provide extra packages not in the configuration file
- extraEmacsPackages = emacsPkgs;
- });
+ # The emacs packages that I use
+ # I differ between
+ # - stable (Packages that I use for some time - happy with it)
+ # - unstable (Packages that I use for some time - but may drop)
+ # - testing (Packages that I try out - the new stuff)
+ emacsPkgs = epkgs:
+ (with epkgs.melpaPackages ;
+
+ ## windows-purpose (testing)
+ [ window-purpose ] ++
+
+ ## helm (stable)
+ # emacs completion engine
+ [ helm helm-ag ] ++
+
+ ## deft (testing)
+ # text search for a directory
+ [ deft ] ++
+
+ ## lsp mode (unstable)
+ # Language Server Protocol mode
+ # Used for rust
+ [ company-lsp dap-mode helm-lsp lsp-mode lsp-treemacs lsp-ui ] ++
+
+ ## emacs convenience (stable)
+ # Mixed and general purpose
+ [ ag company direnv evil google-this spacemacs-theme ] ++
+
+ ## common lisp (testing)
+ [ slime ] ++
+
+ ## magit (stable)
+ [ magit ] ++
+
+ ## bunch of programming languages (unstable)
+ [ go-mode haskell-mode nix-mode ] ++
+
+ ## rust (unstable)
+ [ racer rust-mode ] ++
+
+ ## python (stable)
+ # Python IDE for emacs
+ [ elpy ]) ++
+
+ ## org-mode
+ # Org-Mode has several extensions
+ # and can be seen as an application of its own.
+ (with epkgs.melpaPackages ;
+ # testing
+ [ org-super-agenda org-bullets org-ql ] ++
+ # unstable
+ [ smex org-mime orgit ]
+ ) ++
+
+ # stable
+ (with epkgs.orgPackages ;
+ [ org-plus-contrib ]) ++
+
+ # stable
+ (with epkgs.elpaPackages ;
+ [ bbdb which-key ]);
+
+# ## EXWM related (unstable)
+# epkgs.exwm
+# epkgs.melpaPackages.desktop-environment
+# epkgs.melpaPackages.helm-exwm
+# ];
+
+ emacsWithOverlay = pkgsWithOverlay.emacsWithPackagesFromUsePackage {
+ config = builtins.readFile ./elisp/init.el;
+ # Package is optional, defaults to pkgs.emacs
+ package = pkgsWithOverlay.emacsGit;
+ # Optionally provide extra packages not in the configuration file
+ extraEmacsPackages = emacsPkgs;
+ };
myEmacs = pkgs.writeDashBin "my-emacs" ''
- exec ${emacsWithOverlay}/bin/emacs -q -l ${dotEmacs} "$@"
+ exec ${emacsWithOverlay}/bin/emacs -q "$@"
'';
myEmacsWithDaemon = pkgs.writeDashBin "my-emacs-daemon" ''
- exec ${emacsWithOverlay}/bin/emacs -q -l ${dotEmacs} --daemon
+ exec ${emacsWithOverlay}/bin/emacs -q --daemon -l ${./elisp/init.el}
'';
myEmacsClient = pkgs.writeDashBin "meclient" ''
- exec ${emacsWithOverlay}/bin/emacsclient --create-frame
+ exec ${emacsWithOverlay}/bin/emacsclient --create-frame "$@"
'';
in {
environment.systemPackages = [
- myEmacs myEmacsWithDaemon myEmacsClient
+ myEmacs myEmacsWithDaemon myEmacsClient emacsWithOverlay
];
+
+## EXWM Config
+# services.xserver = {
+# enable = true;
+# xkbOptions = "caps:super";
+# exportConfiguration = true;
+#
+# displayManager.slim.enable = true;
+# windowManager.default = "exwm";
+#
+# # Set up the login session
+# windowManager.session = [{
+# name = "exwm";
+# start = "${emacsWithOverlay}/bin/emacs -q -l " + builtins.toString ./elisp/init.el;
+# }];
+# };
}
diff --git a/jeschli/2configs/firefox.nix b/jeschli/2configs/firefox.nix
index d171fa82..1e1e1691 100644
--- a/jeschli/2configs/firefox.nix
+++ b/jeschli/2configs/firefox.nix
@@ -2,20 +2,11 @@
let
- # Firefox addons
- https-everywhere = pkgs.callPackage ./own-pkgs/https-everywhere {};
- ublock-origin = pkgs.callPackage ./own-pkgs/ublock-origin {};
- webgl-fingerprint-defender = pkgs.callPackage ./own-pkgs/webgl-fingerprint-defender {};
- canvas-fingerprint-defender = pkgs.callPackage ./own-pkgs/canvas-fingerprint-defender {};
- audio-fingerprint-defender = pkgs.callPackage ./own-pkgs/audio-fingerprint-defender {};
- font-fingerprint-defender = pkgs.callPackage ./own-pkgs/font-fingerprint-defender {};
- user-agent-switcher = pkgs.callPackage ./own-pkgs/user-agent-switcher {};
- dark-reader = pkgs.callPackage ./own-pkgs/dark-reader {};
-
- wrapper = pkgs.callPackage ./overlays/firefox-with-config.nix { };
+ wrapper = pkgs.callPackage ../5pkgs/firefox/firefox-with-config.nix { };
myFirefox = wrapper pkgs.firefox-unwrapped {
- extraExtensions = [
+ # these plugins are defined in 5pkgs/firefox
+ extraExtensions = with pkgs ; [
dark-reader
https-everywhere
ublock-origin
diff --git a/jeschli/2configs/haskell.nix b/jeschli/2configs/haskell.nix
new file mode 100644
index 00000000..46ae24fb
--- /dev/null
+++ b/jeschli/2configs/haskell.nix
@@ -0,0 +1,18 @@
+{ config, pkgs, ... }:
+let
+ all-hies = import (fetchTarball "https://github.com/infinisil/all-hies/tarball/master") {};
+in
+{
+ environment.systemPackages = with pkgs; [
+ cabal2nix
+ gcc
+ ghc
+ haskellPackages.cabal-install
+ haskellPackages.ghcid
+ haskellPackages.hindent
+ haskellPackages.hlint
+ haskellPackages.hoogle
+ haskellPackages.stack
+ (all-hies.selection { selector = p: {inherit (p) ghc864; }; })
+ ];
+}
diff --git a/jeschli/2configs/i3.nix b/jeschli/2configs/i3.nix
index f062daec..1a6c4927 100644
--- a/jeschli/2configs/i3.nix
+++ b/jeschli/2configs/i3.nix
@@ -232,11 +232,10 @@ services.xserver.enable = true;
services.xserver.displayManager.lightdm.enable = true;
# Allow users in video group to change brightness
- hardware.brightnessctl.enable = true;
-
environment.systemPackages = with pkgs; [
rofi # Dmenu replacement
acpilight # Replacement for xbacklight
+ brightnessctl
arandr # Xrandr gui
feh
wirelesstools # To get wireless statistics
diff --git a/jeschli/2configs/overlays/firefox-with-config.nix b/jeschli/2configs/overlays/firefox-with-config.nix
deleted file mode 100644
index 9be6250d..00000000
--- a/jeschli/2configs/overlays/firefox-with-config.nix
+++ /dev/null
@@ -1,488 +0,0 @@
-{ stdenv, lib, pkgs, makeDesktopItem, makeWrapper, lndir, replace, config
-
-## various stuff that can be plugged in
-, flashplayer, hal-flash
-, MPlayerPlugin, ffmpeg, xorg, libpulseaudio, libcanberra-gtk2
-, jrePlugin, icedtea_web
-, bluejeans, djview4, adobe-reader
-, google_talk_plugin, fribid, gnome3/*.gnome-shell*/
-, esteidfirefoxplugin ? ""
-, browserpass, chrome-gnome-shell, uget-integrator, plasma-browser-integration, bukubrow
-, udev
-, kerberos
-
-}:
-
-## configurability of the wrapper itself
-
-browser:
-
-let
- wrapper =
- { browserName ? browser.browserName or (builtins.parseDrvName browser.name).name
- , name ? (browserName + "-" + (builtins.parseDrvName browser.name).version)
- , desktopName ? # browserName with first letter capitalized
- (lib.toUpper (lib.substring 0 1 browserName) + lib.substring 1 (-1) browserName)
- , nameSuffix ? ""
- , icon ? browserName
- , extraPlugins ? []
- , extraPrefs ? ""
- , extraExtensions ? [ ]
- , allowNonSigned ? false
- , disablePocket ? false
- , disableTelemetry ? true
- , disableDrmPlugin ? false
- , showPunycodeUrls ? true
- , disableFirefoxStudies ? true
- , disableFirefoxSync ? false
- , useSystemCertificates ? true
- , dontCheckDefaultBrowser ? false
- # For more information about anti tracking
- # vist https://wiki.kairaven.de/open/app/firefox
- , activateAntiTracking ? true
- , disableFeedbackCommands ? true
- , disableDNSOverHTTPS ? true
- , disableGoogleSafebrowsing ? false
- , clearDataOnShutdown ? false
- , homepage ? "about:blank"
- # For more information about policies visit
- # https://github.com/mozilla/policy-templates#enterprisepoliciesenabled
- , extraPolicies ? {}
- , extraNativeMessagingHosts ? []
- , gdkWayland ? false
- }:
-
- assert gdkWayland -> (browser ? gtk3); # Can only use the wayland backend if gtk3 is being used
-
- let
-
- # If extraExtensions has been set disable manual extensions
- disableManualExtensions = if lib.count (x: true) extraExtensions > 0 then true else false;
-
- cfg = config.${browserName} or {};
- enableAdobeFlash = cfg.enableAdobeFlash or false;
- ffmpegSupport = browser.ffmpegSupport or false;
- gssSupport = browser.gssSupport or false;
- jre = cfg.jre or false;
- icedtea = cfg.icedtea or false;
- supportsJDK =
- stdenv.hostPlatform.system == "i686-linux" ||
- stdenv.hostPlatform.system == "x86_64-linux" ||
- stdenv.hostPlatform.system == "armv7l-linux" ||
- stdenv.hostPlatform.system == "aarch64-linux";
-
- plugins =
- assert !(jre && icedtea);
- if builtins.hasAttr "enableVLC" cfg
- then throw "The option \"${browserName}.enableVLC\" has been removed since Firefox no longer supports npapi plugins"
- else
- ([ ]
- ++ lib.optional enableAdobeFlash flashplayer
- ++ lib.optional (cfg.enableDjvu or false) (djview4)
- ++ lib.optional (cfg.enableMPlayer or false) (MPlayerPlugin browser)
- ++ lib.optional (supportsJDK && jre && jrePlugin ? mozillaPlugin) jrePlugin
- ++ lib.optional icedtea icedtea_web
- ++ lib.optional (cfg.enableGoogleTalkPlugin or false) google_talk_plugin
- ++ lib.optional (cfg.enableFriBIDPlugin or false) fribid
- ++ lib.optional (cfg.enableGnomeExtensions or false) gnome3.gnome-shell
- ++ lib.optional (cfg.enableBluejeans or false) bluejeans
- ++ lib.optional (cfg.enableAdobeReader or false) adobe-reader
- ++ lib.optional (cfg.enableEsteid or false) esteidfirefoxplugin
- ++ extraPlugins
- );
- nativeMessagingHosts =
- ([ ]
- ++ lib.optional (cfg.enableBrowserpass or false) (lib.getBin browserpass)
- ++ lib.optional (cfg.enableBukubrow or false) bukubrow
- ++ lib.optional (cfg.enableGnomeExtensions or false) chrome-gnome-shell
- ++ lib.optional (cfg.enableUgetIntegrator or false) uget-integrator
- ++ lib.optional (cfg.enablePlasmaBrowserIntegration or false) plasma-browser-integration
- ++ extraNativeMessagingHosts
- );
- libs = lib.optional stdenv.isLinux udev
- ++ lib.optional ffmpegSupport ffmpeg
- ++ lib.optional gssSupport kerberos
- ++ lib.optionals (cfg.enableQuakeLive or false)
- (with xorg; [ stdenv.cc libX11 libXxf86dga libXxf86vm libXext libXt alsaLib zlib ])
- ++ lib.optional (enableAdobeFlash && (cfg.enableAdobeFlashDRM or false)) hal-flash
- ++ lib.optional (config.pulseaudio or true) libpulseaudio;
- gtk_modules = [ libcanberra-gtk2 ];
-
- enterprisePolicies =
- {
- policies = {
- DisableAppUpdate = true;
- } // lib.optionalAttrs disableManualExtensions (
- {
- ExtensionSettings = {
- "*" = {
- blocked_install_message = "You can't have manual extension mixed with nix extensions";
- installation_mode = "blocked";
- };
-
- } // lib.foldr (e: ret:
- ret // {
- "${e.extid}" = {
- installation_mode = "allowed";
- };
- }
- ) {} extraExtensions;
- }
- ) // lib.optionalAttrs disablePocket (
- {
- DisablePocket = true;
- }
- ) // lib.optionalAttrs disableTelemetry (
- {
- DisableTelemetry = true;
- }
- ) // lib.optionalAttrs disableFirefoxStudies (
- {
- DisableFirefoxStudies = true;
- }
- ) // lib.optionalAttrs disableFirefoxSync (
- {
- DisableFirefoxAccounts = true;
- }
- ) // lib.optionalAttrs useSystemCertificates (
- {
- # Disable useless firefox certificate store
- Certificates = {
- ImportEnterpriseRoots = true;
- };
- }
- ) // lib.optionalAttrs (
- if lib.count (x: true) extraExtensions > 0 then true else false) (
- {
- # Don't try to update nix installed addons
- DisableSystemAddonUpdate = true;
-
- # But update manually installed addons
- ExtensionUpdate = false;
- }
- ) // lib.optionalAttrs dontCheckDefaultBrowser (
- {
- DontCheckDefaultBrowser = true;
- }
- )// lib.optionalAttrs disableDNSOverHTTPS (
- {
- DNSOverHTTPS = {
- Enabled = false;
- };
- }
- ) // lib.optionalAttrs clearDataOnShutdown (
- {
- SanitizeOnShutdown = true;
- }
- ) // lib.optionalAttrs disableFeedbackCommands (
- {
- DisableFeedbackCommands = true;
- }
- ) // lib.optionalAttrs ( if homepage == "" then false else true) (
- {
- Homepage = {
- URL = homepage;
- Locked = true;
- };
- }
- ) // extraPolicies ;} ;
-
-
- extensions = builtins.map (a:
- if ! (builtins.hasAttr "signed" a) || ! (builtins.isBool a.signed) then
- throw "Addon ${a.pname} needs boolean attribute 'signed' "
- else if ! (builtins.hasAttr "extid" a) || ! (builtins.isString a.extid) then
- throw "Addon ${a.pname} needs a string attribute 'extid'"
- else if a.signed == false && !allowNonSigned then
- throw "Disable signature checking in firefox if you want ${a.pname} addon"
- else a
- ) extraExtensions;
-
- policiesJson = builtins.toFile "policies.json"
- (builtins.toJSON enterprisePolicies);
-
- mozillaCfg = builtins.toFile "mozilla.cfg" ''
- // First line must be a comment
-
- // Remove default top sites
- lockPref("browser.newtabpage.pinned", "");
- lockPref("browser.newtabpage.activity-stream.default.sites", "");
-
- // Deactivate first run homepage
- lockPref("browser.startup.firstrunSkipsHomepage", false);
-
- // If true, don't show the privacy policy tab on first run
- lockPref("datareporting.policy.dataSubmissionPolicyBypassNotification", true);
-
- ${
- if allowNonSigned == true then
- ''lockPref("xpinstall.signatures.required", false)''
- else
- ""
- }
-
- ${
- if showPunycodeUrls == true then
- ''
- lockPref("network.IDN_show_punycode", true);
- ''
- else
- ""
- }
-
- ${
- if disableManualExtensions == true then
- ''
- lockPref("extensions.getAddons.showPane", false);
- lockPref("extensions.htmlaboutaddons.recommendations.enabled", false);
- lockPref("app.update.auto", false);
- ''
- else
- ""
- }
-
- ${
- if disableDrmPlugin == true then
- ''
- lockPref("media.gmp-gmpopenh264.enabled", false);
- lockPref("media.gmp-widevinecdm.enabled", false);
- ''
- else
- ""
- }
-
- ${
- if activateAntiTracking == true then
- ''
- // Tracking
- lockPref("browser.send_pings", false);
- lockPref("browser.send_pings.require_same_host", true);
- lockPref("network.dns.disablePrefetch", true);
- lockPref("browser.contentblocking.trackingprotection.control-center.ui.enabled", false);
- lockPref("browser.search.geoip.url", "");
- lockPref("privacy.firstparty.isolate", true);
- lockPref("privacy.userContext.enabled", true);
- lockPref("privacy.userContext.ui.enabled", true);
- lockPref("privacy.firstparty.isolate.restrict_opener_access", false);
- lockPref("network.http.referer.XOriginPolicy", 1);
- lockPref("network.http.referer.hideOnionSource", true);
- lockPref(" privacy.spoof_english", true);
-
- // This option is currently not usable because of bug:
- // https://bugzilla.mozilla.org/show_bug.cgi?id=1557620
- // lockPref("privacy.resistFingerprinting", true);
- ''
- else ""
- }
- ${
- if disableTelemetry == true then
- ''
- // Telemetry
- lockPref("browser.newtabpage.activity-stream.feeds.telemetry", false);
- lockPref("browser.ping-centre.telemetry", false);
- lockPref("devtools.onboarding.telemetry.logged", false);
- lockPref("toolkit.telemetry.archive.enabled", false);
- lockPref("toolkit.telemetry.bhrPing.enabled", false);
- lockPref("toolkit.telemetry.enabled", false);
- lockPref("toolkit.telemetry.firstShutdownPing.enabled", false);
- lockPref("toolkit.telemetry.hybridContent.enabled", false);
- lockPref("toolkit.telemetry.newProfilePing.enabled", false);
- lockPref("toolkit.telemetry.shutdownPingSender.enabled", false);
- lockPref("toolkit.telemetry.reportingpolicy.firstRun", false);
- lockPref("dom.push.enabled", false);
- lockPref("browser.newtabpage.activity-stream.feeds.snippets", false);
- lockPref("security.ssl.errorReporting.enabled", false);
- ''
- else ""
- }
-
- ${
- if disableGoogleSafebrowsing == true then
- ''
- // Google data sharing
- lockPref("browser.safebrowsing.blockedURIs.enabled", false);
- lockPref("browser.safebrowsing.downloads.enabled", false);
- lockPref("browser.safebrowsing.malware.enabled", false);
- lockPref("browser.safebrowsing.passwords.enabled", false);
- lockPref("browser.safebrowsing.provider.google4.dataSharing.enabled", false);
- lockPref("browser.safebrowsing.malware.enabled", false);
- lockPref("browser.safebrowsing.phishing.enabled", false);
- lockPref("browser.safebrowsing.provider.mozilla.gethashURL", "");
- lockPref("browser.safebrowsing.provider.mozilla.updateURL", "");
- ''
- else ""
- }
-
- // User customization
- ${extraPrefs}
- '';
- in stdenv.mkDerivation {
- inherit name;
-
- desktopItem = makeDesktopItem {
- name = browserName;
- exec = "${browserName}${nameSuffix} %U";
- inherit icon;
- comment = "";
- desktopName = "${desktopName}${nameSuffix}${lib.optionalString gdkWayland " (Wayland)"}";
- genericName = "Web Browser";
- categories = "Application;Network;WebBrowser;";
- mimeType = stdenv.lib.concatStringsSep ";" [
- "text/html"
- "text/xml"
- "application/xhtml+xml"
- "application/vnd.mozilla.xul+xml"
- "x-scheme-handler/http"
- "x-scheme-handler/https"
- "x-scheme-handler/ftp"
- ];
- };
-
- nativeBuildInputs = [ makeWrapper lndir ];
- buildInputs = lib.optional (browser ? gtk3) browser.gtk3;
-
- buildCommand = lib.optionalString stdenv.isDarwin ''
- mkdir -p $out/Applications
- cp -R --no-preserve=mode,ownership ${browser}/Applications/${browserName}.app $out/Applications
- rm -f $out${browser.execdir or "/bin"}/${browserName}
- '' + ''
-
- # Link the runtime. The executable itself has to be copied,
- # because it will resolve paths relative to its true location.
- # Any symbolic links have to be replicated as well.
- cd "${browser}"
- find . -type d -exec mkdir -p "$out"/{} \;
-
- find . -type f \( -not -name "${browserName}" \) -exec ln -sT "${browser}"/{} "$out"/{} \;
-
- find . -type f -name "${browserName}" -print0 | while read -d $'\0' f; do
- cp -P --no-preserve=mode,ownership "${browser}/$f" "$out/$f"
- chmod a+rwx "$out/$f"
- done
-
- # fix links and absolute references
- cd "${browser}"
-
- find . -type l -print0 | while read -d $'\0' l; do
- target="$(readlink "$l" | ${replace}/bin/replace-literal -es -- "${browser}" "$out")"
- ln -sfT "$target" "$out/$l"
- done
-
- # This will not patch binaries, only "text" files.
- # Its there for the wrapper mostly.
- cd "$out"
- ${replace}/bin/replace-literal -esfR -- "${browser}" "$out"
-
- # create the wrapper
-
- executablePrefix="$out${browser.execdir or "/bin"}"
-