Use modules folder
76
modules/emacs/.doom.d/config.el
Normal file
|
@ -0,0 +1,76 @@
|
|||
;;; $DOOMDIR/config.el -*- lexical-binding: t; -*-
|
||||
|
||||
;; Place your private configuration here! Remember, you do not need to run 'doom
|
||||
;; sync' after modifying this file!
|
||||
|
||||
|
||||
;; Some functionality uses this to identify you, e.g. GPG configuration, email
|
||||
;; clients, file templates and snippets. It is optional.
|
||||
(setq user-full-name "Elnu"
|
||||
user-mail-address "elnu@elnu.com")
|
||||
|
||||
;; Doom exposes five (optional) variables for controlling fonts in Doom:
|
||||
;;
|
||||
;; - `doom-font' -- the primary font to use
|
||||
;; - `doom-variable-pitch-font' -- a non-monospace font (where applicable)
|
||||
;; - `doom-big-font' -- used for `doom-big-font-mode'; use this for
|
||||
;; presentations or streaming.
|
||||
;; - `doom-unicode-font' -- for unicode glyphs
|
||||
;; - `doom-serif-font' -- for the `fixed-pitch-serif' face
|
||||
;;
|
||||
;; See 'C-h v doom-font' for documentation and more examples of what they
|
||||
;; accept. For example:
|
||||
;;
|
||||
;;(setq doom-font (font-spec :family "Fira Code" :size 12 :weight 'semi-light)
|
||||
;; doom-variable-pitch-font (font-spec :family "Fira Sans" :size 13))
|
||||
;;
|
||||
;; If you or Emacs can't find your font, use 'M-x describe-font' to look them
|
||||
;; up, `M-x eval-region' to execute elisp code, and 'M-x doom/reload-font' to
|
||||
;; refresh your font settings. If Emacs still can't find your font, it likely
|
||||
;; wasn't installed correctly. Font issues are rarely Doom issues!
|
||||
|
||||
;; There are two ways to load a theme. Both assume the theme is installed and
|
||||
;; available. You can either set `doom-theme' or manually load a theme with the
|
||||
;; `load-theme' function. This is the default:
|
||||
(setq doom-theme 'everforest-hard-dark)
|
||||
|
||||
;; This determines the style of line numbers in effect. If set to `nil', line
|
||||
;; numbers are disabled. For relative line numbers, set this to `relative'.
|
||||
(setq display-line-numbers-type t)
|
||||
|
||||
;; If you use `org' and don't want your org files in the default location below,
|
||||
;; change `org-directory'. It must be set before org loads!
|
||||
(setq org-directory "~/org/")
|
||||
|
||||
|
||||
;; Whenever you reconfigure a package, make sure to wrap your config in an
|
||||
;; `after!' block, otherwise Doom's defaults may override your settings. E.g.
|
||||
;;
|
||||
;; (after! PACKAGE
|
||||
;; (setq x y))
|
||||
;;
|
||||
;; The exceptions to this rule:
|
||||
;;
|
||||
;; - Setting file/directory variables (like `org-directory')
|
||||
;; - Setting variables which explicitly tell you to set them before their
|
||||
;; package is loaded (see 'C-h v VARIABLE' to look up their documentation).
|
||||
;; - Setting doom variables (which start with 'doom-' or '+').
|
||||
;;
|
||||
;; Here are some additional functions/macros that will help you configure Doom.
|
||||
;;
|
||||
;; - `load!' for loading external *.el files relative to this one
|
||||
;; - `use-package!' for configuring packages
|
||||
;; - `after!' for running code after a package has loaded
|
||||
;; - `add-load-path!' for adding directories to the `load-path', relative to
|
||||
;; this file. Emacs searches the `load-path' when you load packages with
|
||||
;; `require' or `use-package'.
|
||||
;; - `map!' for binding new keys
|
||||
;;
|
||||
;; To get information about any of these functions/macros, move the cursor over
|
||||
;; the highlighted symbol at press 'K' (non-evil users must press 'C-c c k').
|
||||
;; This will open documentation for it, including demos of how they are used.
|
||||
;; Alternatively, use `C-h o' to look up a symbol (functions, variables, faces,
|
||||
;; etc).
|
||||
;;
|
||||
;; You can also try 'gd' (or 'C-c c d') to jump to their definition and see how
|
||||
;; they are implemented.
|
212
modules/emacs/.doom.d/init.el
Normal file
|
@ -0,0 +1,212 @@
|
|||
;;; init.el -*- lexical-binding: t; -*-
|
||||
|
||||
;; This file controls what Doom modules are enabled and what order they load
|
||||
;; in. Remember to run 'doom sync' after modifying it!
|
||||
|
||||
;; NOTE Press 'SPC h d h' (or 'C-h d h' for non-vim users) to access Doom's
|
||||
;; documentation. There you'll find a link to Doom's Module Index where all
|
||||
;; of our modules are listed, including what flags they support.
|
||||
|
||||
;; NOTE Move your cursor over a module's name (or its flags) and press 'K' (or
|
||||
;; 'C-c c k' for non-vim users) to view its documentation. This works on
|
||||
;; flags as well (those symbols that start with a plus).
|
||||
;;
|
||||
;; Alternatively, press 'gd' (or 'C-c c d') on a module to browse its
|
||||
;; directory (for easy access to its source code).
|
||||
|
||||
(doom! :input
|
||||
;;bidi ; (tfel ot) thgir etirw uoy gnipleh
|
||||
;;chinese
|
||||
;;japanese
|
||||
;;layout ; auie,ctsrnm is the superior home row
|
||||
|
||||
:completion
|
||||
company ; the ultimate code completion backend
|
||||
;;helm ; the *other* search engine for love and life
|
||||
;;ido ; the other *other* search engine...
|
||||
;;ivy ; a search engine for love and life
|
||||
vertico ; the search engine of the future
|
||||
|
||||
:ui
|
||||
;;deft ; notational velocity for Emacs
|
||||
doom ; what makes DOOM look the way it does
|
||||
doom-dashboard ; a nifty splash screen for Emacs
|
||||
;;doom-quit ; DOOM quit-message prompts when you quit Emacs
|
||||
;;(emoji +unicode) ; 🙂
|
||||
hl-todo ; highlight TODO/FIXME/NOTE/DEPRECATED/HACK/REVIEW
|
||||
;;hydra
|
||||
;;indent-guides ; highlighted indent columns
|
||||
;;ligatures ; ligatures and symbols to make your code pretty again
|
||||
;;minimap ; show a map of the code on the side
|
||||
modeline ; snazzy, Atom-inspired modeline, plus API
|
||||
;;nav-flash ; blink cursor line after big motions
|
||||
;;neotree ; a project drawer, like NERDTree for vim
|
||||
ophints ; highlight the region an operation acts on
|
||||
(popup +defaults) ; tame sudden yet inevitable temporary windows
|
||||
;;tabs ; a tab bar for Emacs
|
||||
;;treemacs ; a project drawer, like neotree but cooler
|
||||
;;unicode ; extended unicode support for various languages
|
||||
(vc-gutter +pretty) ; vcs diff in the fringe
|
||||
vi-tilde-fringe ; fringe tildes to mark beyond EOB
|
||||
;;window-select ; visually switch windows
|
||||
workspaces ; tab emulation, persistence & separate workspaces
|
||||
;;zen ; distraction-free coding or writing
|
||||
|
||||
:editor
|
||||
(evil +everywhere); come to the dark side, we have cookies
|
||||
file-templates ; auto-snippets for empty files
|
||||
fold ; (nigh) universal code folding
|
||||
;;(format +onsave) ; automated prettiness
|
||||
;;god ; run Emacs commands without modifier keys
|
||||
;;lispy ; vim for lisp, for people who don't like vim
|
||||
;;multiple-cursors ; editing in many places at once
|
||||
;;objed ; text object editing for the innocent
|
||||
;;parinfer ; turn lisp into python, sort of
|
||||
;;rotate-text ; cycle region at point between text candidates
|
||||
snippets ; my elves. They type so I don't have to
|
||||
;;word-wrap ; soft wrapping with language-aware indent
|
||||
|
||||
:emacs
|
||||
dired ; making dired pretty [functional]
|
||||
electric ; smarter, keyword-based electric-indent
|
||||
;;ibuffer ; interactive buffer management
|
||||
undo ; persistent, smarter undo for your inevitable mistakes
|
||||
vc ; version-control and Emacs, sitting in a tree
|
||||
|
||||
:term
|
||||
;;eshell ; the elisp shell that works everywhere
|
||||
;;shell ; simple shell REPL for Emacs
|
||||
;;term ; basic terminal emulator for Emacs
|
||||
;;vterm ; the best terminal emulation in Emacs
|
||||
|
||||
:checkers
|
||||
syntax ; tasing you for every semicolon you forget
|
||||
;;(spell +flyspell) ; tasing you for misspelling mispelling
|
||||
;;grammar ; tasing grammar mistake every you make
|
||||
|
||||
:tools
|
||||
;;ansible
|
||||
;;biblio ; Writes a PhD for you (citation needed)
|
||||
;;debugger ; FIXME stepping through code, to help you add bugs
|
||||
;;direnv
|
||||
;;docker
|
||||
;;editorconfig ; let someone else argue about tabs vs spaces
|
||||
;;ein ; tame Jupyter notebooks with emacs
|
||||
(eval +overlay) ; run code, run (also, repls)
|
||||
;;gist ; interacting with github gists
|
||||
lookup ; navigate your code and its documentation
|
||||
;;lsp ; M-x vscode
|
||||
magit ; a git porcelain for Emacs
|
||||
;;make ; run make tasks from Emacs
|
||||
;;pass ; password manager for nerds
|
||||
;;pdf ; pdf enhancements
|
||||
;;prodigy ; FIXME managing external services & code builders
|
||||
;;rgb ; creating color strings
|
||||
;;taskrunner ; taskrunner for all your projects
|
||||
;;terraform ; infrastructure as code
|
||||
;;tmux ; an API for interacting with tmux
|
||||
;;tree-sitter ; syntax and parsing, sitting in a tree...
|
||||
;;upload ; map local to remote projects via ssh/ftp
|
||||
|
||||
:os
|
||||
(:if IS-MAC macos) ; improve compatibility with macOS
|
||||
;;tty ; improve the terminal Emacs experience
|
||||
|
||||
:lang
|
||||
;;agda ; types of types of types of types...
|
||||
;;beancount ; mind the GAAP
|
||||
;;(cc +lsp) ; C > C++ == 1
|
||||
;;clojure ; java with a lisp
|
||||
;;common-lisp ; if you've seen one lisp, you've seen them all
|
||||
;;coq ; proofs-as-programs
|
||||
;;crystal ; ruby at the speed of c
|
||||
;;csharp ; unity, .NET, and mono shenanigans
|
||||
;;data ; config/data formats
|
||||
;;(dart +flutter) ; paint ui and not much else
|
||||
;;dhall
|
||||
;;elixir ; erlang done right
|
||||
;;elm ; care for a cup of TEA?
|
||||
emacs-lisp ; drown in parentheses
|
||||
;;erlang ; an elegant language for a more civilized age
|
||||
;;ess ; emacs speaks statistics
|
||||
;;factor
|
||||
;;faust ; dsp, but you get to keep your soul
|
||||
;;fortran ; in FORTRAN, GOD is REAL (unless declared INTEGER)
|
||||
;;fsharp ; ML stands for Microsoft's Language
|
||||
;;fstar ; (dependent) types and (monadic) effects and Z3
|
||||
;;gdscript ; the language you waited for
|
||||
;;(go +lsp) ; the hipster dialect
|
||||
;;(graphql +lsp) ; Give queries a REST
|
||||
;;(haskell +lsp) ; a language that's lazier than I am
|
||||
;;hy ; readability of scheme w/ speed of python
|
||||
;;idris ; a language you can depend on
|
||||
json ; At least it ain't XML
|
||||
;;(java +lsp) ; the poster child for carpal tunnel syndrome
|
||||
javascript ; all(hope(abandon(ye(who(enter(here))))))
|
||||
;;julia ; a better, faster MATLAB
|
||||
;;kotlin ; a better, slicker Java(Script)
|
||||
latex ; writing papers in Emacs has never been so fun
|
||||
;;lean ; for folks with too much to prove
|
||||
;;ledger ; be audit you can be
|
||||
;;lua ; one-based indices? one-based indices
|
||||
markdown ; writing docs for people to ignore
|
||||
;;nim ; python + lisp at the speed of c
|
||||
nix ; I hereby declare "nix geht mehr!"
|
||||
;;ocaml ; an objective camel
|
||||
(org +roam2) ; organize your plain life in plain text
|
||||
;;php ; perl's insecure younger brother
|
||||
;;plantuml ; diagrams for confusing people more
|
||||
;;purescript ; javascript, but functional
|
||||
python ; beautiful is better than ugly
|
||||
;;qt ; the 'cutest' gui framework ever
|
||||
;;racket ; a DSL for DSLs
|
||||
;;raku ; the artist formerly known as perl6
|
||||
;;rest ; Emacs as a REST client
|
||||
;;rst ; ReST in peace
|
||||
;;(ruby +rails) ; 1.step {|i| p "Ruby is #{i.even? ? 'love' : 'life'}"}
|
||||
(rust +lsp) ; Fe2O3.unwrap().unwrap().unwrap().unwrap()
|
||||
;;scala ; java, but good
|
||||
;;(scheme +guile) ; a fully conniving family of lisps
|
||||
sh ; she sells {ba,z,fi}sh shells on the C xor
|
||||
;;sml
|
||||
;;solidity ; do you need a blockchain? No.
|
||||
;;swift ; who asked for emoji variables?
|
||||
;;terra ; Earth and Moon in alignment for performance.
|
||||
;;web ; the tubes
|
||||
yaml ; JSON, but readable
|
||||
;;zig ; C, but simpler
|
||||
|
||||
:email
|
||||
;;(mu4e +org +gmail)
|
||||
;;notmuch
|
||||
;;(wanderlust +gmail)
|
||||
|
||||
:app
|
||||
;;calendar
|
||||
;;emms
|
||||
;;everywhere ; *leave* Emacs!? You must be joking
|
||||
;;irc ; how neckbeards socialize
|
||||
;;(rss +org) ; emacs as an RSS reader
|
||||
;;twitter ; twitter client https://twitter.com/vnought
|
||||
|
||||
:config
|
||||
;;literate
|
||||
(default +bindings +smartparens))
|
||||
|
||||
;; Set theme to everforest
|
||||
(add-to-list 'custom-theme-load-path "~/.emacs.d/everforest")
|
||||
(load-theme 'everforest-hard-dark t)
|
||||
|
||||
;; Configure font
|
||||
(add-to-list 'default-frame-alist '(font . "FiraCode Nerd Font Mono" ))
|
||||
(set-face-attribute 'default nil :height 120) ;; 12pt
|
||||
|
||||
;; Roxy
|
||||
(setq fancy-splash-image (concat doom-user-dir "splash.jpg"))
|
||||
|
||||
;; LaTeX editing
|
||||
(add-hook 'org-mode-hook 'org-fragtog-mode) ;; automatically expand/preview LaTeX
|
||||
(add-hook 'org-mode-hook 'org-latex-preview) ;; automatically preview LaTeX on open
|
||||
|
||||
;; Display .rasi (rofi theme files) as CSS
|
||||
(add-to-list 'auto-mode-alist '("\\.rasi\\'" . css-mode))
|
56
modules/emacs/.doom.d/packages.el
Normal file
|
@ -0,0 +1,56 @@
|
|||
;; -*- no-byte-compile: t; -*-
|
||||
;;; $DOOMDIR/packages.el
|
||||
|
||||
;; To install a package with Doom you must declare them here and run 'doom sync'
|
||||
;; on the command line, then restart Emacs for the changes to take effect -- or
|
||||
;; use 'M-x doom/reload'.
|
||||
|
||||
|
||||
;; To install SOME-PACKAGE from MELPA, ELPA or emacsmirror:
|
||||
;(package! some-package)
|
||||
|
||||
;; To install a package directly from a remote git repo, you must specify a
|
||||
;; `:recipe'. You'll find documentation on what `:recipe' accepts here:
|
||||
;; https://github.com/radian-software/straight.el#the-recipe-format
|
||||
;(package! another-package
|
||||
; :recipe (:host github :repo "username/repo"))
|
||||
|
||||
;; If the package you are trying to install does not contain a PACKAGENAME.el
|
||||
;; file, or is located in a subdirectory of the repo, you'll need to specify
|
||||
;; `:files' in the `:recipe':
|
||||
;(package! this-package
|
||||
; :recipe (:host github :repo "username/repo"
|
||||
; :files ("some-file.el" "src/lisp/*.el")))
|
||||
|
||||
;; If you'd like to disable a package included with Doom, you can do so here
|
||||
;; with the `:disable' property:
|
||||
;(package! builtin-package :disable t)
|
||||
|
||||
;; You can override the recipe of a built in package without having to specify
|
||||
;; all the properties for `:recipe'. These will inherit the rest of its recipe
|
||||
;; from Doom or MELPA/ELPA/Emacsmirror:
|
||||
;(package! builtin-package :recipe (:nonrecursive t))
|
||||
;(package! builtin-package-2 :recipe (:repo "myfork/package"))
|
||||
|
||||
;; Specify a `:branch' to install a package from a particular branch or tag.
|
||||
;; This is required for some packages whose default branch isn't 'master' (which
|
||||
;; our package manager can't deal with; see radian-software/straight.el#279)
|
||||
;(package! builtin-package :recipe (:branch "develop"))
|
||||
|
||||
;; Use `:pin' to specify a particular commit to install.
|
||||
;(package! builtin-package :pin "1a2b3c4d5e")
|
||||
|
||||
|
||||
;; Doom's packages are pinned to a specific commit and updated from release to
|
||||
;; release. The `unpin!' macro allows you to unpin single packages...
|
||||
;(unpin! pinned-package)
|
||||
;; ...or multiple packages
|
||||
;(unpin! pinned-package another-pinned-package)
|
||||
;; ...Or *all* packages (NOT RECOMMENDED; will likely break things)
|
||||
;(unpin! t)
|
||||
|
||||
;; Automatically expand/preview LaTeX
|
||||
(package! fragtog :recipe
|
||||
(:host github
|
||||
:repo "io12/org-fragtog"
|
||||
:files ("org-fragtog.el")))
|
BIN
modules/emacs/.doom.d/splash.jpg
Normal file
After Width: | Height: | Size: 93 KiB |
29
modules/emacs/default.nix
Normal file
|
@ -0,0 +1,29 @@
|
|||
{ pkgs, lib, config, configDir, fetchFromGitHub, ... }:
|
||||
|
||||
{
|
||||
programs.emacs = {
|
||||
enable = true;
|
||||
package = pkgs.emacs-gtk;
|
||||
};
|
||||
services.emacs.enable = true;
|
||||
home.activation.doom = lib.hm.dag.entryAfter["writeBoundary"] ''
|
||||
if [ ! -d .emacs.d ]; then
|
||||
git clone --depth 1 https://github.com/doomemacs/doomemacs .emacs.d
|
||||
fi
|
||||
mkdir -p .doom.d
|
||||
ln -sf ${config.home.homeDirectory}/${configDir}/modules/emacs/.doom.d/* .doom.d
|
||||
'';
|
||||
home.file = {
|
||||
".emacs.d/everforest".source = pkgs.fetchFromGitHub {
|
||||
owner = "Theory-of-Everything";
|
||||
repo = "everforest-emacs";
|
||||
rev = "703b16b742b753f6ad077b5c7f51947d1926c530";
|
||||
sha256 = "sha256-ZtpN6wM+R+4w1FCO6axWRNFX8feSau/o3V/wnw5EiJQ=";
|
||||
};
|
||||
};
|
||||
home.packages = with pkgs; [
|
||||
# Doom Emacs fonts, manually installed with
|
||||
# M-x all-the-icons-install-fonts
|
||||
emacs-all-the-icons-fonts
|
||||
];
|
||||
}
|
BIN
modules/fcitx5/arrow.png
Normal file
After Width: | Height: | Size: 337 B |
22
modules/fcitx5/default.nix
Normal file
|
@ -0,0 +1,22 @@
|
|||
{ pkgs, ... }:
|
||||
|
||||
with import ../theme; let
|
||||
themeFolder = ".local/share/fcitx5/themes/${theme}/";
|
||||
in
|
||||
{
|
||||
i18n.inputMethod = {
|
||||
enabled = "fcitx5";
|
||||
fcitx5.addons = with pkgs; [ fcitx5-anthy ];
|
||||
};
|
||||
|
||||
home.file = {
|
||||
"${themeFolder}theme.conf".source = with colors; pkgs.substituteAll ({
|
||||
src = ./theme.conf;
|
||||
background = "${bg1}80";
|
||||
highlight = bg0;
|
||||
} // colors);
|
||||
"${themeFolder}arrow.png".source = ./arrow.png;
|
||||
"${themeFolder}radio.png".source = ./radio.png;
|
||||
".config/fcitx5/conf/classicui.conf".text = "Theme=${theme}";
|
||||
};
|
||||
}
|
BIN
modules/fcitx5/radio.png
Normal file
After Width: | Height: | Size: 272 B |
78
modules/fcitx5/theme.conf
Normal file
|
@ -0,0 +1,78 @@
|
|||
[Metadata]
|
||||
ScaleWithDPI=True
|
||||
|
||||
[InputPanel]
|
||||
Font=Sans 13
|
||||
NormalColor=@fg0@
|
||||
HighlightCandidateColor=@fg1@;
|
||||
HighlightColor=@undefined@
|
||||
HighlightBackgroundColor=@undefined@
|
||||
Spacing=3
|
||||
|
||||
[InputPanel/TextMargin]
|
||||
Left=10
|
||||
Right=10
|
||||
Top=6
|
||||
Bottom=6
|
||||
|
||||
[InputPanel/Background]
|
||||
Color=@background@
|
||||
|
||||
[InputPanel/Background/Margin]
|
||||
Left=2
|
||||
Right=2
|
||||
Top=2
|
||||
Bottom=2
|
||||
|
||||
[InputPanel/Highlight]
|
||||
Color=@highlight@
|
||||
|
||||
[InputPanel/Highlight/Margin]
|
||||
Left=10
|
||||
Right=10
|
||||
Top=7
|
||||
Bottom=7
|
||||
|
||||
[Menu]
|
||||
Font=Sans 10
|
||||
NormalColor=@fg0@
|
||||
Spacing=3
|
||||
|
||||
[Menu/Background]
|
||||
Color=@background@
|
||||
|
||||
[Menu/Background/Margin]
|
||||
Left=2
|
||||
Right=2
|
||||
Top=2
|
||||
Bottom=2
|
||||
|
||||
[Menu/ContentMargin]
|
||||
Left=2
|
||||
Right=2
|
||||
Top=2
|
||||
Bottom=2
|
||||
|
||||
[Menu/Highlight]
|
||||
Color=@highlight@
|
||||
|
||||
[Menu/Highlight/Margin]
|
||||
Left=10
|
||||
Right=10
|
||||
Top=5
|
||||
Bottom=5
|
||||
|
||||
[Menu/Separator]
|
||||
Color=@highlight@
|
||||
|
||||
[Menu/CheckBox]
|
||||
Image=radio.png
|
||||
|
||||
[Menu/SubMenu]
|
||||
Image=arrow.png
|
||||
|
||||
[Menu/TextMargin]
|
||||
Left=5
|
||||
Right=5
|
||||
Top=5
|
||||
Bottom=5
|
57
modules/firefox/default.nix
Normal file
|
@ -0,0 +1,57 @@
|
|||
{ pkgs, user, ... }:
|
||||
|
||||
let
|
||||
startpageDir = import ../startpage/dir.nix;
|
||||
startpage = "file:///home/${user}/${startpageDir}/index.html";
|
||||
firefox-csshacks = pkgs.fetchFromGitHub {
|
||||
owner = "MrOtherGuy";
|
||||
repo = "firefox-csshacks";
|
||||
rev = "76867a5f570319d1bfd8cd396c92c876450328da";
|
||||
sha256 = "pGDnT1aRsu/06dlYtsHLkaNakfvXmQQ/SAplClyS/2c=";
|
||||
};
|
||||
in
|
||||
{
|
||||
nixpkgs = {
|
||||
config.allowUnfree = true;
|
||||
overlays = [
|
||||
(self: super: {
|
||||
firefox = super.firefox.overrideAttrs (oa: {
|
||||
buildCommand = oa.buildCommand + ''
|
||||
cd lib/firefox
|
||||
mkdir -p defaults/pref
|
||||
cat > defaults/pref/autoconfig.js << 'EOL'
|
||||
//
|
||||
pref("general.config.filename", "autoconfig.cfg");
|
||||
pref("general.config.obscure_value", 0);
|
||||
pref("general.config.sandbox_enabled", false);
|
||||
EOL
|
||||
cat > autoconfig.cfg << 'EOL'
|
||||
//
|
||||
var {classes:Cc,interfaces:Ci,utils:Cu} = Components;
|
||||
|
||||
/* set new tab page */
|
||||
try {
|
||||
Cu.import("resource:///modules/AboutNewTab.jsm");
|
||||
var newTabURL = "${startpage}";
|
||||
AboutNewTab.newTabURL = newTabURL;
|
||||
} catch(e){Cu.reportError(e);} // report errors in the Browser Console
|
||||
EOL
|
||||
'';
|
||||
});
|
||||
})
|
||||
];
|
||||
};
|
||||
|
||||
programs.firefox = {
|
||||
enable = true;
|
||||
profiles.${user} = {
|
||||
isDefault = true;
|
||||
settings = {
|
||||
"browser.startup.homepage" = "${startpage}";
|
||||
"toolkit.legacyUserProfileCustomizations.stylesheets" = true;
|
||||
"browser.backspace_action" = 0;
|
||||
};
|
||||
userChrome = builtins.readFile "${firefox-csshacks}/chrome/autohide_toolbox.css";
|
||||
};
|
||||
};
|
||||
}
|
11
modules/git/default.nix
Normal file
|
@ -0,0 +1,11 @@
|
|||
{ pkgs, ... }:
|
||||
|
||||
{
|
||||
programs.git = {
|
||||
package = pkgs.gitAndTools.gitFull;
|
||||
enable = true;
|
||||
userName = "ElnuDev";
|
||||
userEmail = "elnu@elnu.com";
|
||||
extraConfig.pull.rebase = true;
|
||||
};
|
||||
}
|
114
modules/i3/default.nix
Normal file
|
@ -0,0 +1,114 @@
|
|||
{ pkgs, lib, ... }:
|
||||
|
||||
let
|
||||
theme = import ../theme;
|
||||
mod = "Mod4";
|
||||
in with theme.colors; {
|
||||
# Dependencies
|
||||
home.packages = with pkgs; [
|
||||
playerctl # pactl comes with PulseAudio
|
||||
xclip # Copying screenshots to clipboard
|
||||
];
|
||||
|
||||
# Screenshots
|
||||
services.flameshot = {
|
||||
enable = true;
|
||||
settings = {
|
||||
General = {
|
||||
disabledTrayIcon = true;
|
||||
showStartupLaunchMessage = false;
|
||||
showHelp = false;
|
||||
showSidePanelButton = false;
|
||||
uiColor = "${bg1}";
|
||||
contrastUiColor = "${bg0}";
|
||||
drawColor = "#ffffff";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
xsession.windowManager.i3 = {
|
||||
enable = true;
|
||||
config = {
|
||||
defaultWorkspace = "workspace number 1"; # defaults to 10 for some reason
|
||||
modifier = mod;
|
||||
gaps = {
|
||||
inner = 12;
|
||||
smartGaps = true;
|
||||
};
|
||||
colors = {
|
||||
focused = {
|
||||
border = "${bg1}";
|
||||
background = "${bg1}";
|
||||
text = "${fg0}";
|
||||
indicator = "${undefined}";
|
||||
childBorder = "${undefined}";
|
||||
};
|
||||
focusedInactive = {
|
||||
border = "${bg1}";
|
||||
background = "${bg1}";
|
||||
text = "${fg0}";
|
||||
indicator = "${undefined}";
|
||||
childBorder = "${undefined}";
|
||||
};
|
||||
unfocused = {
|
||||
border = "${bg0}";
|
||||
background = "${bg0}";
|
||||
text = "${fg0}";
|
||||
indicator = "${undefined}";
|
||||
childBorder = "${undefined}";
|
||||
};
|
||||
};
|
||||
startup = [
|
||||
{
|
||||
command = "(systemctl --user restart polybar &) && (nm-applet &) && (nextcloud &)";
|
||||
always = true;
|
||||
notification = false;
|
||||
}
|
||||
];
|
||||
keybindings = lib.mkOptionDefault {
|
||||
"${mod}+Return" = "exec kitty";
|
||||
"${mod}+Shift+e" = "exec i3-msg exit"; # bypass default session exit confirmation menu
|
||||
"${mod}+space" = "exec i3-msg open"; # Open blank space
|
||||
"Mod1+Q" = "exec /etc/profiles/per-user/elnu/bin/rofi-power";
|
||||
|
||||
# Audio controls
|
||||
"XF86AudioRaiseVolume" = "exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ +10%";
|
||||
"XF86AudioLowerVolume" = "exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ -10%";
|
||||
"XF86AudioMute" = "exec --no-startup-id pactl set-sink-mute @DEFAULT_SINK@ toggle";
|
||||
"XF86AudioMicMute" = "exec --no-startup-id pactl set-source-mute @DEFAULT_SOURCE@ toggle";
|
||||
|
||||
# Media player controls
|
||||
"XF86AudioPlay" = "exec playerctl play-pause";
|
||||
"XF86AudioNext" = "exec playerctl next";
|
||||
"XF86AudioPrev" = "exec playerctl previous";
|
||||
|
||||
# Window resizing
|
||||
"${mod}+Ctrl+Left" = "resize shrink width 16px or 1ppt";
|
||||
"${mod}+Ctrl+Right" = "resize grow width 16px or 1ppt";
|
||||
"${mod}+Ctrl+Up" = "resize grow height 16px or 1ppt";
|
||||
"${mod}+Ctrl+Down" = "resize shrink height 16px or 1ppt";
|
||||
|
||||
# Screenshots
|
||||
"Print" = "exec flameshot gui";
|
||||
};
|
||||
keycodebindings = {
|
||||
"133" = "--release exec rofi -show run -theme";
|
||||
};
|
||||
window.commands = [
|
||||
{
|
||||
command = "border pixel 0";
|
||||
criteria = { class = "^.*"; };
|
||||
}
|
||||
{
|
||||
command = "floating enable";
|
||||
criteria = { class = "Nextcloud"; };
|
||||
}
|
||||
{
|
||||
command = "floating enable";
|
||||
criteria = { class = "PureRef"; };
|
||||
}
|
||||
];
|
||||
bars = [];
|
||||
};
|
||||
};
|
||||
}
|
12
modules/neovim/default.nix
Normal file
|
@ -0,0 +1,12 @@
|
|||
{ pkgs, ... }:
|
||||
|
||||
{
|
||||
programs.neovim = {
|
||||
enable = true;
|
||||
viAlias = true;
|
||||
vimAlias = true;
|
||||
defaultEditor = true;
|
||||
plugins = with pkgs.vimPlugins; [ vim-nix vim-markdown ];
|
||||
extraConfig = builtins.readFile ./vimrc;
|
||||
};
|
||||
}
|
27
modules/neovim/vimrc
Normal file
|
@ -0,0 +1,27 @@
|
|||
" Temporary configuration for editing Nix files
|
||||
syntax on set autoindent set expandtab
|
||||
set tabstop=2
|
||||
set shiftwidth=2
|
||||
|
||||
" Shortcutting split navigation
|
||||
map <C-h> <C-w>h
|
||||
map <C-j> <C-w>j
|
||||
map <C-k> <C-w>k
|
||||
map <C-l> <C-w>l
|
||||
|
||||
" v for vertical, s for side-by-side
|
||||
map <C-w>v :split<CR>
|
||||
map <C-w>s :vsplit<CR>
|
||||
|
||||
" Use system clipboard
|
||||
set clipboard+=unnamedplus
|
||||
|
||||
" Markdown configuration
|
||||
autocmd FileType markdown setlocal spell spelllang+=cjk linebreak expandtab
|
||||
let g:vim_markdown_fenced_languages = ['rs=rust', 'RS=rust'] " https://github.com/preservim/vim-markdown/issues/618
|
||||
let g:vim_markdown_frontmatter = 1
|
||||
|
||||
" Tegaki Tuesday formatting
|
||||
autocmd BufRead,BufNewFile */tegakituesday.com/content/** set formatoptions-=r
|
||||
" prevent automatically adding new hyphen on enter, though causes some issues
|
||||
" https://stackoverflow.com/a/4896097
|
28
modules/picom/default.nix
Normal file
|
@ -0,0 +1,28 @@
|
|||
{ ... }:
|
||||
|
||||
{
|
||||
services.picom = {
|
||||
enable = true;
|
||||
settings = {
|
||||
backend = "glx"; # Fixes black backdrop on some rounded corners
|
||||
corner-radius = 12;
|
||||
round-borders = 1;
|
||||
blur = {
|
||||
method = "gaussian";
|
||||
size = 8;
|
||||
deviation = 2;
|
||||
};
|
||||
blur-background-exclude = [
|
||||
"override_redirect = true"
|
||||
];
|
||||
# Ignore polybar
|
||||
rounded-corners-exclude = [
|
||||
"window_type = 'dock'"
|
||||
"window_type = 'desktop'"
|
||||
];
|
||||
opacity-rule = [
|
||||
"0:_NET_WM_STATE@:32a *= '_NET_WM_STATE_HIDDEN'"
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
24
modules/polybar/aozora.nix
Normal file
|
@ -0,0 +1,24 @@
|
|||
{ pkgs, lib, fetchgit, rustPlatform }:
|
||||
|
||||
rustPlatform.buildRustPackage rec {
|
||||
pname = "aozora";
|
||||
version = "5b94155b4137c885bd63bc49cd400ec58152547f";
|
||||
|
||||
buildInputs = with pkgs; [ openssl ];
|
||||
nativeBuildInputs = with pkgs; [ pkg-config ];
|
||||
|
||||
src = fetchgit {
|
||||
url = "https://git.elnu.com/ElnuDev/aozora";
|
||||
rev = version;
|
||||
sha256 = "93MP1Iw1eklC+IEQXAhzLHJ+qsDASm53qw7vUEtEstI=";
|
||||
};
|
||||
|
||||
cargoSha256 = "fiDdk6c1rPS6L//KKqfp6ODxcLEzNKrpySCb9n8aGQ0=";
|
||||
|
||||
meta = with lib; {
|
||||
description = "A simple CLI for fetching Plume Labs air quality info.";
|
||||
homepage = "https://git.elnu.com/ElnuDev/aozora";
|
||||
license = licenses.gpl3;
|
||||
maintainers = [ maintainers.tailhook ];
|
||||
};
|
||||
}
|
132
modules/polybar/default.nix
Normal file
|
@ -0,0 +1,132 @@
|
|||
{ pkgs, lib, ... }:
|
||||
|
||||
let
|
||||
theme = import ../theme;
|
||||
in with theme.colors;
|
||||
{
|
||||
# Dependencies
|
||||
home.packages = with pkgs; [
|
||||
(pkgs.callPackage ./aozora.nix { })
|
||||
(pkgs.callPackage ./polybar-now-playing.nix { })
|
||||
lm_sensors
|
||||
];
|
||||
services.polybar = {
|
||||
enable = true;
|
||||
script = "polybar &";
|
||||
package = pkgs.polybar.override {
|
||||
alsaSupport = true;
|
||||
};
|
||||
config = {
|
||||
"bar/top" = {
|
||||
tray-position = "right";
|
||||
font-0 = "Noto Sans Mono;2";
|
||||
font-1 = "M+ 2p;2";
|
||||
background = "${bg0}";
|
||||
foreground = "${fg0}";
|
||||
width = "100%";
|
||||
height = "24pt";
|
||||
line-size = "3pt";
|
||||
padding-right = 1;
|
||||
module-margin = 1;
|
||||
separator = "|";
|
||||
separator-foreground = "${disabled}";
|
||||
cursor-click = "pointer";
|
||||
cursor-scroll = "ns-resize";
|
||||
modules-left = [
|
||||
"xworkspaces"
|
||||
"xwindow"
|
||||
"now-playing"
|
||||
];
|
||||
modules-right = [
|
||||
"aozora"
|
||||
"filesystem"
|
||||
"pulseaudio"
|
||||
"memory"
|
||||
"cpu"
|
||||
"cputemp"
|
||||
"battery"
|
||||
"date"
|
||||
];
|
||||
};
|
||||
"module/xworkspaces" = {
|
||||
type = "internal/xworkspaces";
|
||||
|
||||
label-active-background = "${bg1}";
|
||||
label-active-underline = "${primary}";
|
||||
label-active-padding-right = 1;
|
||||
|
||||
label-occupied-padding-right = 1;
|
||||
|
||||
label-urgent-background = "${alert}";
|
||||
label-urgent-padding-right = 1;
|
||||
|
||||
label-empty-foreground = "${disabled}";
|
||||
label-empty-padding-right = 1;
|
||||
};
|
||||
"module/xwindow" = {
|
||||
type = "internal/xwindow";
|
||||
label-maxlen = 32;
|
||||
};
|
||||
"module/now-playing" = {
|
||||
type = "custom/script";
|
||||
tail = true;
|
||||
format = "<label>";
|
||||
exec = "/etc/profiles/per-user/elnu/bin/polybar-now-playing";
|
||||
click-right = "kill -USR1 $(pgrep --oldest --parent %pid%)";
|
||||
};
|
||||
"module/aozora" = {
|
||||
type = "custom/script";
|
||||
format = "<label>";
|
||||
# Wait a few seconds before running to prevent no internet error on first start
|
||||
# TODO: make aozora wait blockingly for internet in --bar mode
|
||||
exec = "/run/current-system/sw/bin/sleep 3 && /etc/profiles/per-user/elnu/bin/aozora air-quality-in-lakewood-aw-341300 --bar 2> /dev/null";
|
||||
interval = 1800;
|
||||
};
|
||||
"module/filesystem" = {
|
||||
type = "internal/fs";
|
||||
|
||||
interval = 25;
|
||||
mount-0 = "/";
|
||||
|
||||
label-mounted = "%{F${primary}}%mountpoint%%{F-} %percentage_used%%";
|
||||
label-unmounted = "%mountpoint% not mounted";
|
||||
label-unmounted-foreground = "${disabled}";
|
||||
};
|
||||
"module/pulseaudio" = {
|
||||
type = "internal/pulseaudio";
|
||||
|
||||
format-volume-prefix = "VOL ";
|
||||
format-volume-prefix-foreground = "${primary}";
|
||||
|
||||
label-muted = "muted";
|
||||
label-muted-foreground = "${disabled}";
|
||||
};
|
||||
"module/memory" = {
|
||||
type = "internal/memory";
|
||||
|
||||
interval = 2;
|
||||
|
||||
format-prefix = "RAM ";
|
||||
format-prefix-foreground = "${primary}";
|
||||
};
|
||||
"module/cpu" = {
|
||||
type = "internal/cpu";
|
||||
|
||||
interval = 2;
|
||||
|
||||
format-prefix = "CPU ";
|
||||
format-prefix-foreground = "${primary}";
|
||||
};
|
||||
"module/date" = {
|
||||
type = "internal/date";
|
||||
|
||||
internal = 1;
|
||||
|
||||
date = "%H:%M";
|
||||
date-alt = "%Y-%m-%d %H:%M:%S";
|
||||
|
||||
label-foreground = "${primary}";
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
36
modules/polybar/polybar-now-playing.nix
Normal file
|
@ -0,0 +1,36 @@
|
|||
{ pkgs, lib, fetchFromGitHub }:
|
||||
with pkgs.python3Packages;
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "polybar-now-playing";
|
||||
version = "c61658efeda178a842b03c558749169aa629f5a6";
|
||||
|
||||
# nativeBuildInputs = with pkgs; [ setuptools ];
|
||||
propagatedBuildInputs = with pkgs; [ dbus-python ];
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "d093w1z";
|
||||
repo = pname;
|
||||
rev = version;
|
||||
sha256 = "DM4cVOWZiEJtBbGcA7PCuX2ZQMbNOj3AQX795ABBvOs=";
|
||||
};
|
||||
|
||||
meta = with lib; {
|
||||
description = "Script for polybar to display and control media(not only Spotify) using DBus. ";
|
||||
homepage = "https://github.com/d093w1z/polybar-now-playing";
|
||||
maintaners = [ maintainers.tailhook ];
|
||||
};
|
||||
|
||||
preBuild = ''
|
||||
cat > setup.py << 'EOF'
|
||||
from setuptools import setup
|
||||
setup (
|
||||
name='polybar-now-playing',
|
||||
author='d093w1z',
|
||||
description='Script for polybar to display and control media(not only Spotify) using DBus. ',
|
||||
install_requires=['dbus-python'],
|
||||
scripts=['polybar-now-playing'],
|
||||
)
|
||||
EOF
|
||||
'';
|
||||
}
|
15
modules/ranger/default.nix
Normal file
|
@ -0,0 +1,15 @@
|
|||
{ pkgs, ... }:
|
||||
|
||||
{
|
||||
home.packages = with pkgs; [ ranger ];
|
||||
|
||||
home.file = {
|
||||
".config/ranger/plugins/ranger_devicons".source = pkgs.fetchFromGitHub {
|
||||
owner = "alexanderjeurissen";
|
||||
repo = "ranger_devicons";
|
||||
rev = "49fe4753c89615a32f14b2f4c78bbd02ee76be3c";
|
||||
sha256 = "YT7YFiTA2XtIoVzaVjUWMu6j4Nwo4iGzvOtjjWva/80=";
|
||||
};
|
||||
".config/ranger/rc.conf".text = "default_linemode devicons";
|
||||
};
|
||||
}
|
18
modules/rofi/default.nix
Normal file
|
@ -0,0 +1,18 @@
|
|||
{ pkgs, ... }:
|
||||
|
||||
let
|
||||
_theme = import ../theme;
|
||||
theme = _theme.theme; # Theme name
|
||||
in {
|
||||
home.packages = with pkgs; [
|
||||
(pkgs.callPackage ./power.nix { })
|
||||
wmctrl # TODO: add as dependency of rofi-power
|
||||
];
|
||||
programs.rofi = {
|
||||
enable = true;
|
||||
inherit theme;
|
||||
};
|
||||
home.file.".config/rofi/${theme}.rasi".source = pkgs.substituteAll ({
|
||||
src = ./theme.rasi;
|
||||
} // _theme.colors);
|
||||
}
|
9
modules/rofi/power.nix
Normal file
|
@ -0,0 +1,9 @@
|
|||
{ pkgs, substituteAll }:
|
||||
|
||||
substituteAll {
|
||||
name = "rofi-power";
|
||||
src = ./power.sh;
|
||||
|
||||
dir = "bin";
|
||||
isExecutable = true;
|
||||
}
|
67
modules/rofi/power.sh
Executable file
|
@ -0,0 +1,67 @@
|
|||
POWER_OFF=" Power Off"
|
||||
REBOOT=" Reboot"
|
||||
SUSPEND=" Suspend"
|
||||
LOG_OUT=" Log out"
|
||||
|
||||
chosen=`printf "%s\n%s\n%s\n%s" "$POWER_OFF" "$REBOOT" "$SUSPEND" "$LOG_OUT" | rofi -dmenu -i -p ""`
|
||||
|
||||
case "$chosen" in
|
||||
$POWER_OFF) action="power off" ;;
|
||||
$REBOOT) action="reboot" ;;
|
||||
$SUSPEND) action="suspend" ;;
|
||||
$LOG_OUT) action="log out" ;;
|
||||
*) exit 1 ;;
|
||||
esac
|
||||
|
||||
confirm=`printf "Yes, %s" "$action"`
|
||||
sure=`printf "%s\nNo, cancel" "$confirm" | rofi -dmenu -i -p "Are you sure"`
|
||||
|
||||
if [[ $sure != $confirm ]]; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ $chosen != $SUSPEND ]]; then
|
||||
# based on https://github.com/ardadem/graceful-shutdown
|
||||
|
||||
TIMEOUT=10
|
||||
|
||||
APPLIST_TO_TERMINATE=(Discord firefox)
|
||||
|
||||
close_windows () {
|
||||
wmctrl -l | awk '{print $1}' | while read -r wId
|
||||
do
|
||||
wmctrl -i -c $wId
|
||||
done
|
||||
}
|
||||
|
||||
window_timeout_countdown () {
|
||||
for i in $(seq 1 $TIMEOUT);
|
||||
do
|
||||
if [[ -z $(wmctrl -l) ]]; then
|
||||
return 0
|
||||
fi
|
||||
sleep 1
|
||||
done
|
||||
exit 1
|
||||
}
|
||||
|
||||
terminate_processes () {
|
||||
pidof ${APPLIST_TO_TERMINATE[@]} | tr ' ' '\n' | while read -r pId
|
||||
do
|
||||
kill -15 $pId
|
||||
tail --pid=$pId -f /dev/null # wait until terminate it
|
||||
done
|
||||
}
|
||||
|
||||
close_windows
|
||||
window_timeout_countdown
|
||||
terminate_processes
|
||||
fi
|
||||
|
||||
case "$chosen" in
|
||||
$POWER_OFF) poweroff ;;
|
||||
$REBOOT) reboot ;;
|
||||
$SUSPEND) systemctl suspend ;;
|
||||
$LOG_OUT) i3-msg exit ;;
|
||||
*) exit 1 ;;
|
||||
esac
|
83
modules/rofi/theme.rasi
Normal file
|
@ -0,0 +1,83 @@
|
|||
/* Modified from https://github.com/undiabler/nord-rofi-theme */
|
||||
configuration {
|
||||
font: "Noto Sans Mono 12";
|
||||
width: 30;
|
||||
line-margin: 10;
|
||||
lines: 6;
|
||||
columns: 2;
|
||||
|
||||
display-ssh: "";
|
||||
display-run: "";
|
||||
display-drun: "";
|
||||
display-window: "";
|
||||
display-combi: "";
|
||||
show-icons: true;
|
||||
}
|
||||
|
||||
* {
|
||||
background-color: transparent;
|
||||
highlight: underline bold @fg1@;
|
||||
}
|
||||
|
||||
window {
|
||||
location: center;
|
||||
anchor: center;
|
||||
transparency: "screenshot";
|
||||
padding: 0px;
|
||||
border: 0px;
|
||||
border-radius: 0px;
|
||||
|
||||
spacing: 0;
|
||||
children: [mainbox];
|
||||
orientation: horizontal;
|
||||
}
|
||||
|
||||
mainbox {
|
||||
spacing: 0;
|
||||
children: [ inputbar, message, listview ];
|
||||
}
|
||||
|
||||
message {
|
||||
color: @bg0@;
|
||||
padding: 5;
|
||||
border-color: @fg0@;
|
||||
border: 0px 2px 2px 2px;
|
||||
}
|
||||
|
||||
inputbar {
|
||||
color: @fg0@;
|
||||
padding: 11px;
|
||||
background-color: @bg1@;
|
||||
}
|
||||
|
||||
entry, prompt, case-indicator {
|
||||
text-font: inherit;
|
||||
text-color: inherit;
|
||||
}
|
||||
|
||||
prompt {
|
||||
margin: 0px 0.3em 0em 0em;
|
||||
}
|
||||
|
||||
listview {
|
||||
padding: 8px;
|
||||
border: 0;
|
||||
background-color: @bg0@e5;
|
||||
dynamic: false;
|
||||
}
|
||||
|
||||
element {
|
||||
padding: 3px;
|
||||
border-radius: 4px;
|
||||
text-color: @fg0@;
|
||||
}
|
||||
|
||||
element selected.normal {
|
||||
background-color: @primary@;
|
||||
text-color: @bg0@;
|
||||
}
|
||||
|
||||
element-text, element-icon {
|
||||
background-color: inherit;
|
||||
text-color: inherit;
|
||||
}
|
26
modules/startpage/default.nix
Normal file
|
@ -0,0 +1,26 @@
|
|||
{ pkgs, lib, ... }:
|
||||
|
||||
let
|
||||
theme = import ../theme;
|
||||
startpageDir = import ./dir.nix;
|
||||
out = "${startpageDir}.tmp/";
|
||||
in
|
||||
{
|
||||
home.file = {
|
||||
"${out}" = {
|
||||
source = ./html;
|
||||
recursive = true;
|
||||
};
|
||||
"${out}colors.css".text = ":root {\n" + (theme.css lib) + "\n}";
|
||||
};
|
||||
# Make files not symlinks, this causes issues displaying in Firefox
|
||||
home.activation.startpage = lib.hm.dag.entryAfter["writeBoundary"] ''
|
||||
mkdir -p ${startpageDir}
|
||||
mv ${out}* ${startpageDir}
|
||||
rmdir ${out}
|
||||
cd ${startpageDir}
|
||||
for file in `find -type l`; do
|
||||
cp --remove-destination `readlink $file` $file
|
||||
done
|
||||
'';
|
||||
}
|
1
modules/startpage/dir.nix
Normal file
|
@ -0,0 +1 @@
|
|||
".startpage"
|
66
modules/startpage/html/anilist.svg
Normal file
|
@ -0,0 +1,66 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
preserveAspectRatio="xMidYMid"
|
||||
width="135.955"
|
||||
height="102.559"
|
||||
viewBox="0 0 135.955 102.559"
|
||||
version="1.1"
|
||||
id="svg78"
|
||||
sodipodi:docname="anilist.svg"
|
||||
inkscape:version="1.1.2 (0a00cf5339, 2022-02-04, custom)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<sodipodi:namedview
|
||||
id="namedview80"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
showgrid="false"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0"
|
||||
inkscape:zoom="2.4215116"
|
||||
inkscape:cx="38.612245"
|
||||
inkscape:cy="-22.506603"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1048"
|
||||
inkscape:window-x="1920"
|
||||
inkscape:window-y="32"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg78" />
|
||||
<defs
|
||||
id="defs70">
|
||||
<style
|
||||
id="style68">
|
||||
.cls-1 {
|
||||
fill: #02a9ff;
|
||||
}
|
||||
|
||||
.cls-1, .cls-2 {
|
||||
fill-rule: evenodd;
|
||||
}
|
||||
|
||||
.cls-2 {
|
||||
fill: #fefefe;
|
||||
}
|
||||
</style>
|
||||
</defs>
|
||||
<g
|
||||
id="g76"
|
||||
transform="translate(-18.331,-34.792)">
|
||||
<path
|
||||
d="M 111.322,111.157 V 41.029 c 0,-4.019 -2.217,-6.237 -6.236,-6.237 H 91.365 c -4.019,0 -6.237,2.218 -6.237,6.237 0,0 0,15.308 0,33.304 0,0.938 9.037,5.293 9.273,6.214 6.885,26.902 1.496,48.433 -5.031,49.438 10.672,0.528 11.846,5.659 3.897,2.153 1.216,-14.354 5.961,-14.326 19.602,-0.528 0.117,0.119 2.797,5.741 2.964,5.741 15.337,0 32.217,0 32.217,0 4.019,0 6.236,-2.217 6.236,-6.236 v -13.721 c 0,-4.019 -2.217,-6.237 -6.236,-6.237 z"
|
||||
class="cls-1"
|
||||
id="path72" />
|
||||
<path
|
||||
d="M 54.365,34.792 18.331,137.351 h 27.996 l 6.098,-17.74 h 30.49 l 5.96,17.74 h 27.857 L 80.836,34.792 Z m 4.435,62.09 8.731,-28.412 9.563,28.412 z"
|
||||
class="cls-2"
|
||||
id="path74" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 2.1 KiB |
1
modules/startpage/html/envelope-regular.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Pro 6.2.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2022 Fonticons, Inc. --><path d="M64 112c-8.8 0-16 7.2-16 16v22.1L220.5 291.7c20.7 17 50.4 17 71.1 0L464 150.1V128c0-8.8-7.2-16-16-16H64zM48 212.2V384c0 8.8 7.2 16 16 16H448c8.8 0 16-7.2 16-16V212.2L322 328.8c-38.4 31.5-93.7 31.5-132 0L48 212.2zM0 128C0 92.7 28.7 64 64 64H448c35.3 0 64 28.7 64 64V384c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V128z"/></svg>
|
After Width: | Height: | Size: 567 B |
41
modules/startpage/html/git.svg
Normal file
|
@ -0,0 +1,41 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
width="2500"
|
||||
height="2500"
|
||||
viewBox="0 0 256 256"
|
||||
preserveAspectRatio="xMinYMin meet"
|
||||
version="1.1"
|
||||
id="svg4"
|
||||
sodipodi:docname="git.svg"
|
||||
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs8" />
|
||||
<sodipodi:namedview
|
||||
id="namedview6"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
showgrid="false"
|
||||
inkscape:zoom="0.3484"
|
||||
inkscape:cx="1250"
|
||||
inkscape:cy="1252.8703"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1080"
|
||||
inkscape:window-x="1920"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg4" />
|
||||
<path
|
||||
d="M251.172 116.594L139.4 4.828c-6.433-6.437-16.873-6.437-23.314 0l-23.21 23.21 29.443 29.443c6.842-2.312 14.688-.761 20.142 4.693 5.48 5.489 7.02 13.402 4.652 20.266l28.375 28.376c6.865-2.365 14.786-.835 20.269 4.657 7.663 7.66 7.663 20.075 0 27.74-7.665 7.666-20.08 7.666-27.749 0-5.764-5.77-7.188-14.235-4.27-21.336l-26.462-26.462-.003 69.637a19.82 19.82 0 0 1 5.188 3.71c7.663 7.66 7.663 20.076 0 27.747-7.665 7.662-20.086 7.662-27.74 0-7.663-7.671-7.663-20.086 0-27.746a19.654 19.654 0 0 1 6.421-4.281V94.196a19.378 19.378 0 0 1-6.421-4.281c-5.806-5.798-7.202-14.317-4.227-21.446L81.47 39.442l-76.64 76.635c-6.44 6.443-6.44 16.884 0 23.322l111.774 111.768c6.435 6.438 16.873 6.438 23.316 0l111.251-111.249c6.438-6.44 6.438-16.887 0-23.324"
|
||||
fill="#DE4C36"
|
||||
id="path2"
|
||||
style="fill:#ffffff" />
|
||||
</svg>
|
After Width: | Height: | Size: 1.9 KiB |
37
modules/startpage/html/index.html
Normal file
|
@ -0,0 +1,37 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<link rel="stylesheet" href="colors.css"> <link rel="stylesheet" href="style.css">
|
||||
<meta name="viewport" content= "width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no; shrink-to-fit=no;">
|
||||
</head>
|
||||
<body>
|
||||
<div id="content">
|
||||
<div id="cards">
|
||||
<a class="blue" href="https://anilist.co" title="AniList"><img src="anilist.svg" alt="AniList"></a>
|
||||
<a class="blue" href="http://elnuhub:8096" title="Jellyfin"><img src="jellyfin.svg" alt="Jellyfin"></a>
|
||||
<a class="blue" href="https:/nyaa.si" title="Nyaa"><img src="nyaa.webp" alt="Nyaa"></a>
|
||||
<a class="red" href="http://192.168.0.26:9091" title="Transmission"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M418.4 157.9c35.3-8.3 61.6-40 61.6-77.9c0-44.2-35.8-80-80-80c-43.4 0-78.7 34.5-80 77.5L136.2 151.1C121.7 136.8 101.9 128 80 128c-44.2 0-80 35.8-80 80s35.8 80 80 80c12.2 0 23.8-2.7 34.1-7.6L259.7 407.8c-2.4 7.6-3.7 15.8-3.7 24.2c0 44.2 35.8 80 80 80s80-35.8 80-80c0-27.7-14-52.1-35.4-66.4l37.8-207.7zM156.3 232.2c2.2-6.9 3.5-14.2 3.7-21.7l183.8-73.5c3.6 3.5 7.4 6.7 11.6 9.5L317.6 354.1c-5.5 1.3-10.8 3.1-15.8 5.5L156.3 232.2z"/></svg></a>
|
||||
<a class="yellow" href="https://git.elnu.com" title="Git"><img src="git.svg" alt="Git"></a>
|
||||
<a class="yellow" href="https://github.com" title="GitHub"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><path fill="currentColor" d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg></a>
|
||||
<a class="aqua" href="https://mail.proton.me/u/0/inbox" title="ProtonMail"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M64 112c-8.8 0-16 7.2-16 16v22.1L220.5 291.7c20.7 17 50.4 17 71.1 0L464 150.1V128c0-8.8-7.2-16-16-16H64zM48 212.2V384c0 8.8 7.2 16 16 16H448c8.8 0 16-7.2 16-16V212.2L322 328.8c-38.4 31.5-93.7 31.5-132 0L48 212.2zM0 128C0 92.7 28.7 64 64 64H448c35.3 0 64 28.7 64 64V384c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V128z"/></svg></a>
|
||||
<a class="green" href="http://elnuhub" title="Nextcloud"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><path fill="currentColor" d="M64 32C64 14.3 49.7 0 32 0S0 14.3 0 32v96V384c0 35.3 28.7 64 64 64H256V384H64V160H256V96H64V32zM288 192c0 17.7 14.3 32 32 32H544c17.7 0 32-14.3 32-32V64c0-17.7-14.3-32-32-32H445.3c-8.5 0-16.6-3.4-22.6-9.4L409.4 9.4c-6-6-14.1-9.4-22.6-9.4H320c-17.7 0-32 14.3-32 32V192zm0 288c0 17.7 14.3 32 32 32H544c17.7 0 32-14.3 32-32V352c0-17.7-14.3-32-32-32H445.3c-8.5 0-16.6-3.4-22.6-9.4l-13.3-13.3c-6-6-14.1-9.4-22.6-9.4H320c-17.7 0-32 14.3-32 32V480z"/></svg></a>
|
||||
<a class="red" href="https://youtube.com" title="YouTube"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><path fill="currentColor" d="M549.655 124.083c-6.281-23.65-24.787-42.276-48.284-48.597C458.781 64 288 64 288 64S117.22 64 74.629 75.486c-23.497 6.322-42.003 24.947-48.284 48.597-11.412 42.867-11.412 132.305-11.412 132.305s0 89.438 11.412 132.305c6.281 23.65 24.787 41.5 48.284 47.821C117.22 448 288 448 288 448s170.78 0 213.371-11.486c23.497-6.321 42.003-24.171 48.284-47.821 11.412-42.867 11.412-132.305 11.412-132.305s0-89.438-11.412-132.305zm-317.51 213.508V175.185l142.739 81.205-142.739 81.201z"/></svg></a>
|
||||
<a class="orange" href="https://reddit.com" title="Reddit"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M440.3 203.5c-15 0-28.2 6.2-37.9 15.9-35.7-24.7-83.8-40.6-137.1-42.3L293 52.3l88.2 19.8c0 21.6 17.6 39.2 39.2 39.2 22 0 39.7-18.1 39.7-39.7s-17.6-39.7-39.7-39.7c-15.4 0-28.7 9.3-35.3 22l-97.4-21.6c-4.9-1.3-9.7 2.2-11 7.1L246.3 177c-52.9 2.2-100.5 18.1-136.3 42.8-9.7-10.1-23.4-16.3-38.4-16.3-55.6 0-73.8 74.6-22.9 100.1-1.8 7.9-2.6 16.3-2.6 24.7 0 83.8 94.4 151.7 210.3 151.7 116.4 0 210.8-67.9 210.8-151.7 0-8.4-.9-17.2-3.1-25.1 49.9-25.6 31.5-99.7-23.8-99.7zM129.4 308.9c0-22 17.6-39.7 39.7-39.7 21.6 0 39.2 17.6 39.2 39.7 0 21.6-17.6 39.2-39.2 39.2-22 .1-39.7-17.6-39.7-39.2zm214.3 93.5c-36.4 36.4-139.1 36.4-175.5 0-4-3.5-4-9.7 0-13.7 3.5-3.5 9.7-3.5 13.2 0 27.8 28.5 120 29 149 0 3.5-3.5 9.7-3.5 13.2 0 4.1 4 4.1 10.2.1 13.7zm-.8-54.2c-21.6 0-39.2-17.6-39.2-39.2 0-22 17.6-39.7 39.2-39.7 22 0 39.7 17.6 39.7 39.7-.1 21.5-17.7 39.2-39.7 39.2z"/></svg></a>
|
||||
<a class="blue" href="https://search.nixos.org/packages?channel=unstable" title="NixOS"><img src="nixos.svg" alt="NixOS"></a>
|
||||
<a class="red" href="https://pierce.instructure.com/" title="Canvas"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><path fill="currentColor" d="M320 32c-8.1 0-16.1 1.4-23.7 4.1L15.8 137.4C6.3 140.9 0 149.9 0 160s6.3 19.1 15.8 22.6l57.9 20.9C57.3 229.3 48 259.8 48 291.9v28.1c0 28.4-10.8 57.7-22.3 80.8c-6.5 13-13.9 25.8-22.5 37.6C0 442.7-.9 448.3 .9 453.4s6 8.9 11.2 10.2l64 16c4.2 1.1 8.7 .3 12.4-2s6.3-6.1 7.1-10.4c8.6-42.8 4.3-81.2-2.1-108.7C90.3 344.3 86 329.8 80 316.5V291.9c0-30.2 10.2-58.7 27.9-81.5c12.9-15.5 29.6-28 49.2-35.7l157-61.7c8.2-3.2 17.5 .8 20.7 9s-.8 17.5-9 20.7l-157 61.7c-12.4 4.9-23.3 12.4-32.2 21.6l159.6 57.6c7.6 2.7 15.6 4.1 23.7 4.1s16.1-1.4 23.7-4.1L624.2 182.6c9.5-3.4 15.8-12.5 15.8-22.6s-6.3-19.1-15.8-22.6L343.7 36.1C336.1 33.4 328.1 32 320 32zM128 408c0 35.3 86 72 192 72s192-36.7 192-72L496.7 262.6 354.5 314c-11.1 4-22.8 6-34.5 6s-23.5-2-34.5-6L143.3 262.6 128 408z"/></svg></a>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
// Override tabing logic to stay in #cards
|
||||
const cardContainer = document.getElementById("cards");
|
||||
const cards = Array.from(cardContainer.children);
|
||||
document.addEventListener('keydown', e => {
|
||||
if (e.keyCode == 9) {
|
||||
const index = (cards.indexOf(document.activeElement) + (e.shiftKey ? -1 : 1) + cards.length) % cards.length;
|
||||
cards[index].focus();
|
||||
e.preventDefault();
|
||||
}
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
89
modules/startpage/html/jellyfin.svg
Normal file
|
@ -0,0 +1,89 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
|
||||
|
||||
<svg
|
||||
aria-label="Jellyfin"
|
||||
role="img"
|
||||
viewBox="0 0 399.85056 399.83783"
|
||||
version="1.1"
|
||||
id="svg120"
|
||||
sodipodi:docname="jellyfin.svg"
|
||||
width="399.85056"
|
||||
height="399.83783"
|
||||
inkscape:version="1.2.1 (9c6d41e410, 2022-07-14)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<sodipodi:namedview
|
||||
id="namedview122"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#000000"
|
||||
borderopacity="0.25"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
showgrid="false"
|
||||
inkscape:zoom="0.5744287"
|
||||
inkscape:cx="462.19836"
|
||||
inkscape:cy="181.04945"
|
||||
inkscape:window-width="1600"
|
||||
inkscape:window-height="868"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="32"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg120" />
|
||||
<defs
|
||||
id="defs110">
|
||||
<path
|
||||
d="m 190.56,329.07 c 8.63,17.3 122.4,17.12 130.93,0 8.52,-17.1 -47.9,-119.78 -65.46,-119.8 -17.57,0 -74.1,102.5 -65.47,119.8 z"
|
||||
id="A" />
|
||||
<linearGradient
|
||||
id="B"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="126.15"
|
||||
y1="219.32001"
|
||||
x2="457.67999"
|
||||
y2="410.73001">
|
||||
<stop
|
||||
offset="0%"
|
||||
stop-color="#aa5cc3"
|
||||
id="stop104" />
|
||||
<stop
|
||||
offset="100%"
|
||||
stop-color="#00a4dc"
|
||||
id="stop106" />
|
||||
</linearGradient>
|
||||
<path
|
||||
d="m 58.75,417.03 c 25.97,52.15 368.86,51.55 394.55,0 C 478.99,365.48 308.93,56.08 256.03,56.08 203.11,56.08 32.78,364.88 58.75,417.03 Z m 68.04,-45.25 c -17.02,-34.17 94.6,-236.5 129.26,-236.5 34.67,0 146.1,202.7 129.26,236.5 -16.83,33.8 -241.5,34.17 -258.52,0 z"
|
||||
id="C" />
|
||||
</defs>
|
||||
<use
|
||||
xlink:href="#A"
|
||||
fill="url(#B)"
|
||||
id="use112"
|
||||
style="fill:#ffffff;fill-opacity:1"
|
||||
transform="translate(-56.074305,-56.08)" />
|
||||
<use
|
||||
xlink:href="#A"
|
||||
fill-opacity="0"
|
||||
stroke="#000000"
|
||||
stroke-opacity="0"
|
||||
id="use114"
|
||||
transform="translate(-56.074305,-56.08)" />
|
||||
<use
|
||||
xlink:href="#C"
|
||||
fill="url(#B)"
|
||||
id="use116"
|
||||
style="fill:#ffffff;fill-opacity:1"
|
||||
transform="translate(-56.074305,-56.08)" />
|
||||
<use
|
||||
xlink:href="#C"
|
||||
fill-opacity="0"
|
||||
stroke="#000000"
|
||||
stroke-opacity="0"
|
||||
id="use118"
|
||||
transform="translate(-56.074305,-56.08)" />
|
||||
</svg>
|
After Width: | Height: | Size: 2.6 KiB |
124
modules/startpage/html/nixos.svg
Normal file
|
@ -0,0 +1,124 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="44.00663"
|
||||
height="38.168068"
|
||||
viewBox="0 0 41.256216 35.782565"
|
||||
id="svg2"
|
||||
version="1.1"
|
||||
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
|
||||
sodipodi:docname="nixos.svg"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/">
|
||||
<defs
|
||||
id="defs4" />
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="4.6270862"
|
||||
inkscape:cx="53.813564"
|
||||
inkscape:cy="15.992786"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="g5329"
|
||||
showgrid="true"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1048"
|
||||
inkscape:window-x="1920"
|
||||
inkscape:window-y="32"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:snap-global="true"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0"
|
||||
units="px"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1" />
|
||||
<metadata
|
||||
id="metadata7">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="print-logo"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
style="display:inline"
|
||||
transform="translate(-160.45368,535.40252)" />
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer2"
|
||||
inkscape:label="text-2"
|
||||
transform="translate(-27.871478,-422.6377)" />
|
||||
<g
|
||||
style="display:inline"
|
||||
inkscape:label="text-vegur"
|
||||
id="g5329"
|
||||
inkscape:groupmode="layer"
|
||||
transform="translate(-160.45368,535.40252)">
|
||||
<g
|
||||
transform="matrix(0.34788402,0,0,0.34788402,88.02172,-315.64249)"
|
||||
id="g892"
|
||||
style="fill:#ffffff">
|
||||
<path
|
||||
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.709135;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||
d="m 244.38844,-579.00705 28.88469,50.03541 -13.27432,0.12452 -7.71151,-13.44265 -7.76655,13.37082 -6.59552,-0.003 -3.37805,-5.83608 11.06498,-19.02614 -7.85472,-13.66872 z"
|
||||
id="path4861"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cccccccccc" />
|
||||
<path
|
||||
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.709135;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||
d="m 254.81405,-599.61716 -28.88958,50.03257 -6.745,-11.43362 7.78592,-13.3997 -15.46274,-0.0406 -3.29545,-5.71322 3.36517,-5.84351 22.00961,0.0695 7.9101,-13.63673 z"
|
||||
id="use4863"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cccccccccc" />
|
||||
<path
|
||||
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.709135;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||
d="m 257.03036,-559.62188 57.77427,0.003 -6.52931,11.55814 -15.49744,-0.043 7.69619,13.41143 -3.30007,5.71054 -6.74322,0.008 -10.94463,-19.09562 -15.76482,-0.032 z"
|
||||
id="use4865"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cccccccccc" />
|
||||
<path
|
||||
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.709135;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||
d="m 290.65703,-581.54493 -28.88469,-50.03541 13.27432,-0.12452 7.71151,13.44265 7.76655,-13.37082 6.59552,0.003 3.37805,5.83609 -11.06498,19.02614 7.85472,13.66872 z"
|
||||
id="use4867"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cccccccccc" />
|
||||
<path
|
||||
sodipodi:nodetypes="cccccccccc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path4873"
|
||||
d="m 244.38844,-579.00705 28.88469,50.03541 -13.27432,0.12452 -7.71151,-13.44265 -7.76655,13.37082 -6.59552,-0.003 -3.37805,-5.83608 11.06498,-19.02614 -7.85472,-13.66872 z"
|
||||
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.709135;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
|
||||
<path
|
||||
sodipodi:nodetypes="cccccccccc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="use4875"
|
||||
d="m 277.93827,-601.05655 -57.77427,-0.003 6.52931,-11.55815 15.49743,0.043 -7.69618,-13.41144 3.30007,-5.71055 6.74322,-0.007 10.94462,19.09563 15.76482,0.032 z"
|
||||
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.709135;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
|
||||
<path
|
||||
sodipodi:nodetypes="cccccccccc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="use4877"
|
||||
d="m 280.19223,-560.94548 28.88958,-50.03256 6.745,11.43363 -7.78592,13.3997 15.46274,0.0406 3.29544,5.71322 -3.36516,5.84353 -22.00961,-0.0695 -7.9101,13.63676 z"
|
||||
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.709135;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 8.2 KiB |
BIN
modules/startpage/html/nyaa.webp
Normal file
After Width: | Height: | Size: 2.7 KiB |
119
modules/startpage/html/style.css
Normal file
|
@ -0,0 +1,119 @@
|
|||
:root {
|
||||
--red: #e67e80; --red-bg: #4c3743;
|
||||
--orange: #e69875;
|
||||
--orange-bg: #493b40;
|
||||
--yellow: #dbbc7f;
|
||||
--yellow-bg: #45443c;
|
||||
--green: #a7c080;
|
||||
--green-bg: #3c4841;
|
||||
--aqua: #83c092;
|
||||
--aqua-bg: var(--green-bg);
|
||||
--blue: #7fbbb3;
|
||||
--blue-bg: #384b55;
|
||||
}
|
||||
|
||||
.red {
|
||||
--highlight: var(--red-bg);
|
||||
--outline: var(--red);
|
||||
}
|
||||
|
||||
.orange {
|
||||
--highlight: var(--orange-bg);
|
||||
--outline: var(--orange); }
|
||||
|
||||
.yellow {
|
||||
--highlight: var(--yellow-bg);
|
||||
--outline: var(--yellow);
|
||||
}
|
||||
|
||||
.green {
|
||||
--highlight: var(--green-bg);
|
||||
--outline: var(--green);
|
||||
}
|
||||
|
||||
.aqua {
|
||||
--highlight: var(--aqua-bg);
|
||||
--outline: var(--aqua);
|
||||
}
|
||||
|
||||
.blue {
|
||||
--highlight: var(--blue-bg);
|
||||
--outline: var(--blue);
|
||||
}
|
||||
|
||||
html {
|
||||
background: var(--bg1) !important;
|
||||
color: var(--fg0);
|
||||
font-size: 1.5em;
|
||||
min-height: 100vh;
|
||||
}
|
||||
|
||||
body {
|
||||
background: transparent;
|
||||
min-height: 100vh;
|
||||
margin: 1em;
|
||||
margin-top: 0;
|
||||
margin-bottom: 0;
|
||||
display: flex;
|
||||
}
|
||||
|
||||
#content {
|
||||
width: min(40em, 100%);
|
||||
height: 100%;
|
||||
margin: auto;
|
||||
}
|
||||
|
||||
#cards {
|
||||
display: grid;
|
||||
gap: 0.75rem;
|
||||
grid-template-columns: repeat(auto-fill, minmax(148px, 1fr));
|
||||
grid-auto-rows: 1fr;
|
||||
}
|
||||
|
||||
#cards::before {
|
||||
content: '';
|
||||
width: 0;
|
||||
padding-bottom: 100%;
|
||||
grid-row: 1 / 1;
|
||||
grid-column: 1 / 1;
|
||||
}
|
||||
|
||||
#cards > :first-child{
|
||||
grid-row: 1 / 1;
|
||||
grid-column: 1 / 1;
|
||||
}
|
||||
|
||||
#cards > a {
|
||||
color: inherit;
|
||||
text-decoration: none;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
background: linear-gradient(var(--bg2), var(--bg2), var(--highlight, var(--bg2)));
|
||||
font-size: 2em;
|
||||
outline: 1px solid var(--outline, var(--bg0));
|
||||
border-radius: 2px;
|
||||
transition: 0.25s transform;
|
||||
user-select: none;
|
||||
}
|
||||
|
||||
#cards > a > * {
|
||||
color: white;
|
||||
display: inline;
|
||||
height: 1em;
|
||||
}
|
||||
|
||||
#cards > a:hover, #cards > a:focus {
|
||||
outline-width: 2px;
|
||||
outline-color: var(--outline);
|
||||
}
|
||||
|
||||
#cards > a:focus {
|
||||
background: var(--highlight);
|
||||
transform: translateY(-0.25rem);
|
||||
}
|
||||
|
||||
#cards > a:hover *, #cards > a:focus * {
|
||||
font-size: 1.0625em;
|
||||
}
|
17
modules/terminal/default.nix
Normal file
|
@ -0,0 +1,17 @@
|
|||
{ ... }:
|
||||
|
||||
let
|
||||
theme = import ../theme;
|
||||
in
|
||||
{
|
||||
programs.kitty = {
|
||||
enable = true;
|
||||
# https://github.com/kovidgoyal/kitty-themes/blob/master/themes.json
|
||||
theme = "${theme.kitty-theme}";
|
||||
font = {
|
||||
name = "FiraCode Nerd Font Mono";
|
||||
size = 12;
|
||||
};
|
||||
extraConfig = "enable_audio_bell 0\nconfirm_os_window_close 0\nbackground_opacity 0.7";
|
||||
};
|
||||
}
|
11
modules/theme/default.nix
Normal file
|
@ -0,0 +1,11 @@
|
|||
let
|
||||
theme = import ./everforest;
|
||||
colors = {
|
||||
undefined = "#ff00ff";
|
||||
fg1 = "#ffffff";
|
||||
};
|
||||
in
|
||||
{
|
||||
css = lib: lib.strings.concatStringsSep "\n" (lib.attrValues (lib.mapAttrs (k: v: " --${k}: ${v};") theme.colors));
|
||||
}
|
||||
// theme // { colors = theme.colors // colors; }
|
24
modules/theme/everforest/default.nix
Normal file
|
@ -0,0 +1,24 @@
|
|||
{
|
||||
theme = "everforest";
|
||||
|
||||
kitty-theme = "Everforest Dark Hard";
|
||||
gtkTheme = pkgs: {
|
||||
package = pkgs.callPackage ./gtk.nix {};
|
||||
name = "Everforest-Dark-BL";
|
||||
};
|
||||
gtkIconTheme = pkgs: {
|
||||
package = pkgs.callPackage ./gtk.nix {};
|
||||
name = "Everforest-Dark";
|
||||
};
|
||||
wallpaper = "306286.jpg";
|
||||
|
||||
colors = {
|
||||
bg0 = "#1e2326";
|
||||
bg1 = "#272e33";
|
||||
bg2 = "#2e383c";
|
||||
fg0 = "#d3c6aa";
|
||||
primary = "#a7c080";
|
||||
alert = "#e67e80";
|
||||
disabled = "#2e383c";
|
||||
};
|
||||
}
|
49
modules/theme/everforest/gtk.nix
Normal file
|
@ -0,0 +1,49 @@
|
|||
{ lib
|
||||
, stdenv
|
||||
, fetchFromGitHub
|
||||
, gtk-engine-murrine
|
||||
, jdupes
|
||||
}:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "everforest-gtk";
|
||||
version = "unstable-2022-12-09";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "Fausto-Korpsvart";
|
||||
repo = "Everforest-GTK-Theme";
|
||||
rev = "af5920c8a16a53064cbcb7582bd7ef0ba8f44d83";
|
||||
sha256 = "lIAJN8ljmN4RyvyPpHoAheyQBX/qyGXZsGvoTl1vt50=";
|
||||
};
|
||||
|
||||
sourceRoot = ".";
|
||||
|
||||
nativeBuildInputs = [ jdupes ];
|
||||
|
||||
propagatedUserEnvPkgs = [ gtk-engine-murrine ];
|
||||
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
|
||||
mkdir -p $out/share/themes
|
||||
|
||||
for f in `find source/themes -name "*.css"`; do
|
||||
grep -v '^ border: 1px ' $f > tmp
|
||||
mv tmp $f
|
||||
done
|
||||
|
||||
mkdir -p $out/share/themes && cp -a source/themes/* $out/share/themes
|
||||
mkdir -p $out/share/icons && cp -a source/icons/* $out/share/icons
|
||||
|
||||
jdupes -L -r $out/share
|
||||
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
description = "Everforest colour palette for GTK";
|
||||
homepage = "https://github.com/Fausto-Korpsvart/Everforest-GTK-Theme";
|
||||
license = licenses.gpl3Only;
|
||||
platforms = platforms.all;
|
||||
};
|
||||
}
|
21
modules/theme/nord/default.nix
Normal file
|
@ -0,0 +1,21 @@
|
|||
{
|
||||
theme = "nord";
|
||||
|
||||
kitty-theme = "Nord";
|
||||
wallpaper = "roxynord.png";
|
||||
gtkTheme = pkgs: {
|
||||
package = pkgs.nordic;
|
||||
name = "Nordic";
|
||||
};
|
||||
gtkIconTheme = pkgs: null;
|
||||
|
||||
colors = {
|
||||
bg0 = "#2e3440";
|
||||
bg1 = "#3b4252";
|
||||
bg2 = "#434c53";
|
||||
fg0 = "#eceff4";
|
||||
primary = "#8fbcbb";
|
||||
alert = "#bf616a";
|
||||
disabled = "#434c5e";
|
||||
};
|
||||
}
|
28
modules/twemoji/default.nix
Normal file
|
@ -0,0 +1,28 @@
|
|||
{ lib, stdenv, fetchurl }:
|
||||
|
||||
let
|
||||
_fedrel = "2.fc37";
|
||||
in
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "ttf-twemoji";
|
||||
version = "14.0.2";
|
||||
|
||||
src = builtins.fetchTarball {
|
||||
url = "https://kojipkgs.fedoraproject.org/packages/twitter-twemoji-fonts/${version}/${_fedrel}/noarch/twitter-twemoji-fonts-${version}-${_fedrel}.noarch.rpm";
|
||||
sha256 = "sha256:11ay3jc4qd3z1mnijnwdns4bi22y204lva7l7vkazybx1nzrwscl";
|
||||
};
|
||||
|
||||
dontBuild = true;
|
||||
|
||||
installPhase = ''
|
||||
install -Dm755 share/fonts/twemoji/Twemoji.ttf $out/share/fonts/truetype/Twemoji.ttf
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
description = "Twitter Color Emoji for everyone.";
|
||||
homepage = "https://github.com/twitter/twemoji";
|
||||
license = with licenses; [ cc-by-40 mit ];
|
||||
maintainers = with maintainers; [ elnudev ];
|
||||
platforms = platforms.all;
|
||||
};
|
||||
}
|
BIN
modules/wallpapers/178869.jpg
Normal file
After Width: | Height: | Size: 718 KiB |
BIN
modules/wallpapers/178869_1366x768.jpg
Normal file
After Width: | Height: | Size: 761 KiB |
BIN
modules/wallpapers/306286.jpg
Normal file
After Width: | Height: | Size: 486 KiB |
1
modules/wallpapers/README.md
Normal file
|
@ -0,0 +1 @@
|
|||
Numeric post IDs are [konachan.net](https://konachan.net) post IDs, e.g. [https://konachan.net/post/show/178869](https://konachan.net/post/show/178869). Sources will otherwise be listed here if available.
|
BIN
modules/wallpapers/roxynord.png
Normal file
After Width: | Height: | Size: 124 KiB |