18 changed files with 3 additions and 1387 deletions
@ -1,36 +0,0 @@
|
||||
! xft font rendering |
||||
Xft.antialias: 1 |
||||
Xft.hinting: 1 |
||||
Xft.hintstyle: hintfull |
||||
Xft.lcdfilter: lcddefault |
||||
Xft.rgba: rgb |
||||
|
||||
! gruvbox |
||||
! hard contrast: *background: #f9f5d7 |
||||
*background: #fbf1c7 |
||||
! soft contrast: *background: #f2e5bc |
||||
*foreground: #3c3836 |
||||
! Black + DarkGrey |
||||
*color0: #fdf4c1 |
||||
*color8: #928374 |
||||
! DarkRed + Red |
||||
*color1: #cc241d |
||||
*color9: #9d0006 |
||||
! DarkGreen + Green |
||||
*color2: #98971a |
||||
*color10: #79740e |
||||
! DarkYellow + Yellow |
||||
*color3: #d79921 |
||||
*color11: #b57614 |
||||
! DarkBlue + Blue |
||||
*color4: #458588 |
||||
*color12: #076678 |
||||
! DarkMagenta + Magenta |
||||
*color5: #b16286 |
||||
*color13: #8f3f71 |
||||
! DarkCyan + Cyan |
||||
*color6: #689d6a |
||||
*color14: #427b58 |
||||
! LightGrey + White |
||||
*color7: #7c6f64 |
||||
*color15: #3c3836 |
@ -1,2 +1,2 @@
|
||||
--theme="ansi-dark" |
||||
--theme="ansi" |
||||
--style="numbers,changes,header" |
||||
|
Before Width: | Height: | Size: 91 KiB |
Before Width: | Height: | Size: 5.5 KiB |
Before Width: | Height: | Size: 146 KiB |
@ -1,135 +0,0 @@
|
||||
<div class="ui container" id="navbar"> |
||||
<div class="item brand" style="justify-content: space-between;"> |
||||
<a href="{{AppSubUrl}}/"> |
||||
<img class="ui mini image" src="{{StaticUrlPrefix}}/img/kotlc.png"> |
||||
</a> |
||||
<div class="ui basic icon button mobile-only" id="navbar-expand-toggle"> |
||||
<i class="sidebar icon"></i> |
||||
</div> |
||||
</div> |
||||
|
||||
{{if .IsSigned}} |
||||
<a class="item {{if .PageIsDashboard}}active{{end}}" href="{{AppSubUrl}}/">{{.i18n.Tr "dashboard"}}</a> |
||||
<a class="item {{if .PageIsIssues}}active{{end}}" href="{{AppSubUrl}}/issues">{{.i18n.Tr "issues"}}</a> |
||||
<a class="item {{if .PageIsPulls}}active{{end}}" href="{{AppSubUrl}}/pulls">{{.i18n.Tr "pull_requests"}}</a> |
||||
{{if .ShowMilestonesDashboardPage}}<a class="item {{if .PageIsMilestonesDashboard}}active{{end}}" href="{{AppSubUrl}}/milestones">{{.i18n.Tr "milestones"}}</a>{{end}} |
||||
<a class="item {{if .PageIsExplore}}active{{end}}" href="{{AppSubUrl}}/explore/repos">{{.i18n.Tr "explore"}}</a> |
||||
{{else if .IsLandingPageHome}} |
||||
<a class="item {{if .PageIsHome}}active{{end}}" href="{{AppSubUrl}}/">{{.i18n.Tr "home"}}</a> |
||||
<a class="item {{if .PageIsExplore}}active{{end}}" href="{{AppSubUrl}}/explore/repos">{{.i18n.Tr "explore"}}</a> |
||||
{{else if .IsLandingPageExplore}} |
||||
<a class="item {{if .PageIsExplore}}active{{end}}" href="{{AppSubUrl}}/explore/repos">{{.i18n.Tr "home"}}</a> |
||||
{{else if .IsLandingPageOrganizations}} |
||||
<a class="item {{if .PageIsExplore}}active{{end}}" href="{{AppSubUrl}}/explore/organizations">{{.i18n.Tr "home"}}</a> |
||||
{{end}} |
||||
|
||||
{{template "custom/extra_links" .}} |
||||
|
||||
{{/* |
||||
<div class="item"> |
||||
<div class="ui icon input"> |
||||
<input class="searchbox" type="text" placeholder="{{.i18n.Tr "search_project"}}"> |
||||
<i class="search icon"></i> |
||||
</div> |
||||
</div> |
||||
*/}} |
||||
|
||||
{{if .IsSigned}} |
||||
<div class="right stackable menu"> |
||||
<a href="{{AppSubUrl}}/notifications" class="item poping up" data-content='{{.i18n.Tr "notifications"}}' data-variation="tiny inverted"> |
||||
<span class="text"> |
||||
<i class="fitted octicon octicon-bell"></i> |
||||
<span class="sr-mobile-only">{{.i18n.Tr "notifications"}}</span> |
||||
|
||||
{{if .NotificationUnreadCount}} |
||||
<span class="ui red label"> |
||||
{{.NotificationUnreadCount}} |
||||
</span> |
||||
{{end}} |
||||
</span> |
||||
</a> |
||||
|
||||
<div class="ui dropdown jump item poping up" data-content="{{.i18n.Tr "create_new"}}" data-variation="tiny inverted"> |
||||
<span class="text"> |
||||
<i class="fitted octicon octicon-plus"></i> |
||||
<span class="sr-mobile-only">{{.i18n.Tr "create_new"}}</span> |
||||
<i class="fitted octicon octicon-triangle-down not-mobile"></i> |
||||
</span> |
||||
<div class="menu"> |
||||
<a class="item" href="{{AppSubUrl}}/repo/create"> |
||||
<i class="octicon octicon-plus"></i> {{.i18n.Tr "new_repo"}} |
||||
</a> |
||||
<a class="item" href="{{AppSubUrl}}/repo/migrate"> |
||||
<i class="octicon octicon-repo-clone"></i> {{.i18n.Tr "new_migrate"}} |
||||
</a> |
||||
{{if .SignedUser.CanCreateOrganization}} |
||||
<a class="item" href="{{AppSubUrl}}/org/create"> |
||||
<i class="octicon octicon-organization"></i> {{.i18n.Tr "new_org"}} |
||||
</a> |
||||
{{end}} |
||||
</div><!-- end content create new menu --> |
||||
</div><!-- end dropdown menu create new --> |
||||
|
||||
<div class="ui dropdown jump item poping up" tabindex="-1" data-content="{{.i18n.Tr "user_profile_and_more"}}" data-variation="tiny inverted"> |
||||
<span class="text"> |
||||
<img class="ui tiny avatar image" src="{{.SignedUser.RelAvatarLink}}"> |
||||
<span class="sr-only">{{.i18n.Tr "user_profile_and_more"}}</span> |
||||
<span class="mobile-only">{{.SignedUser.Name}}</span> |
||||
<i class="fitted octicon octicon-triangle-down not-mobile" tabindex="-1"></i> |
||||
</span> |
||||
<div class="menu user-menu" tabindex="-1"> |
||||
<div class="ui header"> |
||||
{{.i18n.Tr "signed_in_as"}} <strong>{{.SignedUser.Name}}</strong> |
||||
</div> |
||||
|
||||
<div class="divider"></div> |
||||
<a class="item" href="{{AppSubUrl}}/{{.SignedUser.Name}}"> |
||||
<i class="octicon octicon-person"></i> |
||||
{{.i18n.Tr "your_profile"}}<!-- Your profile --> |
||||
</a> |
||||
<a class="item" href="{{AppSubUrl}}/{{.SignedUser.Name}}?tab=stars"> |
||||
<i class="octicon octicon-star"></i> |
||||
{{.i18n.Tr "your_starred"}} |
||||
</a> |
||||
<a class="{{if .PageIsUserSettings}}active{{end}} item" href="{{AppSubUrl}}/user/settings"> |
||||
<i class="octicon octicon-settings"></i> |
||||
{{.i18n.Tr "your_settings"}}<!-- Your settings --> |
||||
</a> |
||||
<a class="item" target="_blank" rel="noopener noreferrer" href="https://docs.gitea.io"> |
||||
<i class="octicon octicon-question"></i> |
||||
{{.i18n.Tr "help"}}<!-- Help --> |
||||
</a> |
||||
{{if .IsAdmin}} |
||||
<div class="divider"></div> |
||||
|
||||
<a class="{{if .PageIsAdmin}}active{{end}} item" href="{{AppSubUrl}}/admin"> |
||||
<i class="icon settings"></i> |
||||
{{.i18n.Tr "admin_panel"}}<!-- Admin Panel --> |
||||
</a> |
||||
{{end}} |
||||
|
||||
<div class="divider"></div> |
||||
<a class="item" href="{{AppSubUrl}}/user/logout"> |
||||
<i class="octicon octicon-sign-out"></i> |
||||
{{.i18n.Tr "sign_out"}}<!-- Sign Out --> |
||||
</a> |
||||
</div><!-- end content avatar menu --> |
||||
</div><!-- end dropdown avatar menu --> |
||||
</div><!-- end signed user right menu --> |
||||
|
||||
{{else}} |
||||
|
||||
<a class="item" target="_blank" rel="noopener noreferrer" href="https://docs.gitea.io">{{.i18n.Tr "help"}}</a> |
||||
<div class="right stackable menu"> |
||||
{{if .ShowRegistrationButton}} |
||||
<a class="item{{if .PageIsSignUp}} active{{end}}" href="{{AppSubUrl}}/user/sign_up"> |
||||
<i class="octicon octicon-person"></i> {{.i18n.Tr "register"}} |
||||
</a> |
||||
{{end}} |
||||
<a class="item{{if .PageIsSignIn}} active{{end}}" rel="nofollow" href="{{AppSubUrl}}/user/login?redirect_to={{.Link}}"> |
||||
<i class="octicon octicon-sign-in"></i> {{.i18n.Tr "sign_in"}} |
||||
</a> |
||||
</div><!-- end anonymous right menu --> |
||||
|
||||
{{end}} |
||||
</div> |
@ -1,58 +0,0 @@
|
||||
{{template "base/head" .}} |
||||
<div class="home"> |
||||
<div class="ui stackable middle very relaxed page grid"> |
||||
<div class="sixteen wide center aligned centered column"> |
||||
<div> |
||||
<img class="logo" src="{{StaticUrlPrefix}}/img/cats.png" /> |
||||
</div> |
||||
<div class="hero"> |
||||
<h1 class="ui icon header title"> |
||||
{{AppName}} |
||||
</h1> |
||||
<h2>real source code by real people</h2> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
<div class="ui stackable middle very relaxed page grid"> |
||||
<div class="eight wide center column"> |
||||
<h1 class="hero ui icon header"> |
||||
<i class="octicon octicon-flame"></i> oof ow ouch hot |
||||
</h1> |
||||
<p class="large"> |
||||
we put a fork in the microwave again it really hurts |
||||
</p> |
||||
</div> |
||||
<div class="eight wide center column"> |
||||
<h1 class="hero ui icon header"> |
||||
<i class="octicon octicon-device-desktop"></i> computers |
||||
</h1> |
||||
<p class="large"> |
||||
they do the beep and the boop, but not really anything else |
||||
</p> |
||||
</div> |
||||
</div> |
||||
<div class="ui stackable middle very relaxed page grid"> |
||||
<div class="eight wide center column"> |
||||
<h1 class="hero ui icon header"> |
||||
<i class="octicon octicon-rocket"></i> mars for the rich |
||||
</h1> |
||||
<p class="large"> |
||||
deetya iyer has watched interstellar 15.5 times and counting |
||||
</p> |
||||
</div> |
||||
<div class="eight wide center column"> |
||||
<h1 class="hero ui icon header"> |
||||
<i class="octicon octicon-code"></i> angle brackets |
||||
</h1> |
||||
<p class="large"> |
||||
what |
||||
</p> |
||||
</div> |
||||
|
||||
<div class="sixteen wide center aligned centered column"> |
||||
<p class="large">you're probably looking for my <a href="/hazel">actual code</a></p> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
{{template "base/footer" .}} |
||||
|
@ -1,118 +0,0 @@
|
||||
<div class="header-wrapper"> |
||||
{{with .Repository}} |
||||
<div class="ui container"> |
||||
<div class="repo-header"> |
||||
<div class="ui huge breadcrumb repo-title"> |
||||
{{if .RelAvatarLink}} |
||||
<img class="ui avatar image" src="{{.RelAvatarLink}}"> |
||||
{{else}} |
||||
<i class="mega-octicon octicon-{{if .IsPrivate}}lock{{else if .IsMirror}}repo-clone{{else if .IsFork}}repo-forked{{else}}repo{{end}}"></i> |
||||
{{end}} |
||||
<a href="{{AppSubUrl}}/{{.Owner.Name}}">{{.Owner.Name}}</a> |
||||
<div class="divider"> / </div> |
||||
<a href="{{$.RepoLink}}">{{.Name}}</a> |
||||
{{if and .RelAvatarLink .IsPrivate}}<i class="mega-octicon octicon-lock"></i>{{end}} |
||||
{{if .IsTemplate}}<i class="icon fa-copy"></i>{{end}} |
||||
{{if .IsArchived}}<i class="archive icon archived-icon"></i>{{end}} |
||||
{{if .IsMirror}}<div class="fork-flag">{{$.i18n.Tr "repo.mirror_from"}} <a target="_blank" rel="noopener noreferrer" href="{{if .SanitizedOriginalURL}}{{.SanitizedOriginalURL}}{{else}}{{MirrorAddress $.Mirror}}{{end}}">{{if .SanitizedOriginalURL}}{{.SanitizedOriginalURL}}{{else}}{{MirrorAddress $.Mirror}}{{end}}</a></div>{{end}} |
||||
{{if .IsFork}}<div class="fork-flag">{{$.i18n.Tr "repo.forked_from"}} <a href="{{.BaseRepo.Link}}">{{SubStr .BaseRepo.RelLink 1 -1}}</a></div>{{end}} |
||||
{{if .IsGenerated}}<div class="fork-flag">{{$.i18n.Tr "repo.generated_from"}} <a href="{{.TemplateRepo.Link}}">{{SubStr .TemplateRepo.RelLink 1 -1}}</a></div>{{end}} |
||||
</div> |
||||
{{if not .IsBeingCreated}} |
||||
<div class="repo-buttons"> |
||||
<form method="post" action="{{$.RepoLink}}/action/{{if $.IsWatchingRepo}}un{{end}}watch?redirect_to={{$.Link}}"> |
||||
{{$.CsrfTokenHtml}} |
||||
<div class="ui labeled button" tabindex="0"> |
||||
<button type="submit" class="ui compact basic button"> |
||||
<i class="icon fa-eye{{if not $.IsWatchingRepo}}-slash{{end}}"></i>{{if $.IsWatchingRepo}}{{$.i18n.Tr "repo.unwatch"}}{{else}}{{$.i18n.Tr "repo.watch"}}{{end}} |
||||
</button> |
||||
<a class="ui basic label" href="{{.Link}}/watchers"> |
||||
{{.NumWatches}} |
||||
</a> |
||||
</div> |
||||
</form> |
||||
<form method="post" action="{{$.RepoLink}}/action/{{if $.IsStaringRepo}}un{{end}}star?redirect_to={{$.Link}}"> |
||||
{{$.CsrfTokenHtml}} |
||||
<div class="ui labeled button" tabindex="0"> |
||||
<button type="submit" class="ui compact basic button"> |
||||
<i class="icon star{{if not $.IsStaringRepo}} outline{{end}}"></i>{{if $.IsStaringRepo}}{{$.i18n.Tr "repo.unstar"}}{{else}}{{$.i18n.Tr "repo.star"}}{{end}} |
||||
</button> |
||||
<a class="ui basic label" href="{{.Link}}/stars"> |
||||
{{.NumStars}} |
||||
</a> |
||||
</div> |
||||
</form> |
||||
{{if and (not .IsEmpty) ($.Permission.CanRead $.UnitTypeCode)}} |
||||
<div class="ui labeled button {{if and ($.IsSigned) (not $.CanSignedUserFork)}}disabled-repo-button{{end}}" tabindex="0"> |
||||
<a class="ui compact basic button {{if or (not $.IsSigned) (not $.CanSignedUserFork)}}poping up{{end}}" {{if $.CanSignedUserFork}}href="{{AppSubUrl}}/repo/fork/{{.ID}}"{{else if $.IsSigned}} data-content="{{$.i18n.Tr "repo.fork_from_self"}}" {{ else }} data-content="{{$.i18n.Tr "repo.fork_guest_user" }}" rel="nofollow" href="{{AppSubUrl}}/user/login?redirect_to={{AppSubUrl}}/repo/fork/{{.ID}}" {{end}} data-position="top center" data-variation="tiny"> |
||||
<i class="octicon octicon-repo-forked"></i>{{$.i18n.Tr "repo.fork"}} |
||||
</a> |
||||
<a class="ui basic label" href="{{.Link}}/forks"> |
||||
{{.NumForks}} |
||||
</a> |
||||
</div> |
||||
{{end}} |
||||
</div> |
||||
{{end}} |
||||
</div><!-- end grid --> |
||||
</div><!-- end container --> |
||||
{{end}} |
||||
<div class="ui tabs container"> |
||||
{{if not .Repository.IsBeingCreated}} |
||||
<div class="ui tabular stackable menu navbar"> |
||||
{{if .Permission.CanRead $.UnitTypeCode}} |
||||
<a class="{{if .PageIsViewCode}}active{{end}} item" href="{{.RepoLink}}{{if (ne .BranchName .Repository.DefaultBranch)}}/src/{{.BranchNameSubURL | EscapePound}}{{end}}"> |
||||
<i class="octicon octicon-code"></i> {{.i18n.Tr "repo.code"}} |
||||
</a> |
||||
{{end}} |
||||
|
||||
{{if .Permission.CanRead $.UnitTypeIssues}} |
||||
<a class="{{if .PageIsIssueList}}active{{end}} item" href="{{.RepoLink}}/issues"> |
||||
<i class="octicon octicon-issue-opened"></i> {{.i18n.Tr "repo.issues"}} <span class="ui {{if not .Repository.NumOpenIssues}}gray{{else}}blue{{end}} small label">{{.Repository.NumOpenIssues}}</span> |
||||
</a> |
||||
{{end}} |
||||
|
||||
{{if .Permission.CanRead $.UnitTypeExternalTracker}} |
||||
<a class="{{if .PageIsIssueList}}active{{end}} item" href="{{.RepoExternalIssuesLink}}" target="_blank" rel="noopener noreferrer"> |
||||
<i class="octicon octicon-link-external"></i> {{.i18n.Tr "repo.issues"}} </span> |
||||
</a> |
||||
{{end}} |
||||
|
||||
{{if and .Repository.CanEnablePulls (.Permission.CanRead $.UnitTypePullRequests)}} |
||||
<a class="{{if .PageIsPullList}}active{{end}} item" href="{{.RepoLink}}/pulls"> |
||||
<i class="octicon octicon-git-pull-request"></i> Fanfics <span class="ui {{if not .Repository.NumOpenPulls}}gray{{else}}blue{{end}} small label">{{.Repository.NumOpenPulls}}</span> |
||||
</a> |
||||
{{end}} |
||||
|
||||
{{if and (.Permission.CanRead $.UnitTypeReleases) (not .IsEmptyRepo) }} |
||||
<a class="{{if .PageIsReleaseList}}active{{end}} item" href="{{.RepoLink}}/releases"> |
||||
<i class="octicon octicon-tag"></i> {{.i18n.Tr "repo.releases"}} <span class="ui {{if not .NumReleases}}gray{{else}}blue{{end}} small label">{{.NumReleases}}</span> |
||||
</a> |
||||
{{end}} |
||||
|
||||
{{if or (.Permission.CanRead $.UnitTypeWiki) (.Permission.CanRead $.UnitTypeExternalWiki)}} |
||||
<a class="{{if .PageIsWiki}}active{{end}} item" href="{{.RepoLink}}/wiki" {{if (.Permission.CanRead $.UnitTypeExternalWiki)}} target="_blank" rel="noopener noreferrer" {{end}}> |
||||
<i class="octicon octicon-book"></i> {{.i18n.Tr "repo.wiki"}} |
||||
</a> |
||||
{{end}} |
||||
|
||||
{{if and (.Permission.CanReadAny $.UnitTypePullRequests $.UnitTypeIssues $.UnitTypeReleases) (not .IsEmptyRepo)}} |
||||
<a class="{{if .PageIsActivity}}active{{end}} item" href="{{.RepoLink}}/activity"> |
||||
<i class="octicon octicon-pulse"></i> {{.i18n.Tr "repo.activity"}} |
||||
</a> |
||||
{{end}} |
||||
|
||||
{{template "custom/extra_tabs" .}} |
||||
|
||||
{{if .Permission.IsAdmin}} |
||||
<div class="right menu"> |
||||
<a class="{{if .PageIsSettings}}active{{end}} item" href="{{.RepoLink}}/settings"> |
||||
<i class="octicon octicon-tools"></i> {{.i18n.Tr "repo.settings"}} |
||||
</a> |
||||
</div> |
||||
{{end}} |
||||
</div> |
||||
{{end}} |
||||
</div> |
||||
<div class="ui tabs divider"></div> |
||||
</div> |
@ -1,284 +0,0 @@
|
||||
base00 = "#fbf1c7" |
||||
base01 = "#ebdbb2" |
||||
base02 = "#d5c4a1" |
||||
base03 = "#bdae93" |
||||
base04 = "#665c54" |
||||
base05 = "#504945" |
||||
base06 = "#3c3836" |
||||
base07 = "#282828" |
||||
base08 = "#9d0006" |
||||
base09 = "#af3a03" |
||||
base0A = "#b57614" |
||||
base0B = "#79740e" |
||||
base0C = "#427b58" |
||||
base0D = "#076678" |
||||
base0E = "#8f3f71" |
||||
base0F = "#d65d0e" |
||||
|
||||
# Text color of the completion widget. May be a single color to use for |
||||
# all columns or a list of three colors, one for each column. |
||||
c.colors.completion.fg = base05 |
||||
|
||||
# Background color of the completion widget for odd rows. |
||||
c.colors.completion.odd.bg = base00 |
||||
|
||||
# Background color of the completion widget for even rows. |
||||
c.colors.completion.even.bg = base00 |
||||
|
||||
# Foreground color of completion widget category headers. |
||||
c.colors.completion.category.fg = base0A |
||||
|
||||
# Background color of the completion widget category headers. |
||||
c.colors.completion.category.bg = base00 |
||||
|
||||
# Top border color of the completion widget category headers. |
||||
c.colors.completion.category.border.top = base00 |
||||
|
||||
# Bottom border color of the completion widget category headers. |
||||
c.colors.completion.category.border.bottom = base00 |
||||
|
||||
# Foreground color of the selected completion item. |
||||
c.colors.completion.item.selected.fg = base01 |
||||
|
||||
# Background color of the selected completion item. |
||||
c.colors.completion.item.selected.bg = base0A |
||||
|
||||
# Top border color of the selected completion item. |
||||
c.colors.completion.item.selected.border.top = base0A |
||||
|
||||
# Bottom border color of the selected completion item. |
||||
c.colors.completion.item.selected.border.bottom = base0A |
||||
|
||||
# Foreground color of the matched text in the selected completion item. |
||||
c.colors.completion.item.selected.match.fg = base08 |
||||
|
||||
# Foreground color of the matched text in the completion. |
||||
c.colors.completion.match.fg = base0B |
||||
|
||||
# Color of the scrollbar handle in the completion view. |
||||
c.colors.completion.scrollbar.fg = base05 |
||||
|
||||
# Color of the scrollbar in the completion view. |
||||
c.colors.completion.scrollbar.bg = base00 |
||||
|
||||
# Background color of the context menu. If set to null, the Qt default is used. |
||||
c.colors.contextmenu.menu.bg = base00 |
||||
|
||||
# Foreground color of the context menu. If set to null, the Qt default is used. |
||||
c.colors.contextmenu.menu.fg = base05 |
||||
|
||||
# Background color of the context menu’s selected item. If set to null, the Qt default is used. |
||||
c.colors.contextmenu.selected.bg = base0A |
||||
|
||||
# Foreground color of the context menu’s selected item. If set to null, the Qt default is used. |
||||
c.colors.contextmenu.selected.fg = base01 |
||||
|
||||
# Background color for the download bar. |
||||
c.colors.downloads.bar.bg = base00 |
||||
|
||||
# Color gradient start for download text. |
||||
c.colors.downloads.start.fg = base00 |
||||
|
||||
# Color gradient start for download backgrounds. |
||||
c.colors.downloads.start.bg = base0D |
||||
|
||||
# Color gradient end for download text. |
||||
c.colors.downloads.stop.fg = base00 |
||||
|
||||
# Color gradient stop for download backgrounds. |
||||
c.colors.downloads.stop.bg = base0C |
||||
|
||||
# Foreground color for downloads with errors. |
||||
c.colors.downloads.error.fg = base08 |
||||
|
||||
# Font color for hints. |
||||
c.colors.hints.fg = base00 |
||||
|
||||
# Background color for hints. Note that you can use a `rgba(...)` value |
||||
# for transparency. |
||||
c.colors.hints.bg = base0A |
||||
|
||||
# Font color for the matched part of hints. |
||||
c.colors.hints.match.fg = base05 |
||||
|
||||
# Text color for the keyhint widget. |
||||
c.colors.keyhint.fg = base05 |
||||
|
||||
# Highlight color for keys to complete the current keychain. |
||||
c.colors.keyhint.suffix.fg = base05 |
||||
|
||||
# Background color of the keyhint widget. |
||||
c.colors.keyhint.bg = base00 |
||||
|
||||
# Foreground color of an error message. |
||||
c.colors.messages.error.fg = base00 |
||||
|
||||
# Background color of an error message. |
||||
c.colors.messages.error.bg = base08 |
||||
|
||||
# Border color of an error message. |
||||
c.colors.messages.error.border = base08 |
||||
|
||||
# Foreground color of a warning message. |
||||
c.colors.messages.warning.fg = base00 |
||||
|
||||
# Background color of a warning message. |
||||
c.colors.messages.warning.bg = base0E |
||||
|
||||
# Border color of a warning message. |
||||
c.colors.messages.warning.border = base0E |
||||
|
||||
# Foreground color of an info message. |
||||
c.colors.messages.info.fg = base05 |
||||
|
||||
# Background color of an info message. |
||||
c.colors.messages.info.bg = base00 |
||||
|
||||
# Border color of an info message. |
||||
c.colors.messages.info.border = base00 |
||||
|
||||
# Foreground color for prompts. |
||||
c.colors.prompts.fg = base05 |
||||
|
||||
# Border used around UI elements in prompts. |
||||
c.colors.prompts.border = base00 |
||||
|
||||
# Background color for prompts. |
||||
c.colors.prompts.bg = base00 |
||||
|
||||
# Background color for the selected item in filename prompts. |
||||
c.colors.prompts.selected.bg = base0A |
||||
|
||||
# Foreground color of the statusbar. |
||||
c.colors.statusbar.normal.fg = base0B |
||||
|
||||
# Background color of the statusbar. |
||||
c.colors.statusbar.normal.bg = base00 |
||||
|
||||
# Foreground color of the statusbar in insert mode. |
||||
c.colors.statusbar.insert.fg = base00 |
||||
|
||||
# Background color of the statusbar in insert mode. |
||||
c.colors.statusbar.insert.bg = base0D |
||||
|
||||
# Foreground color of the statusbar in passthrough mode. |
||||
c.colors.statusbar.passthrough.fg = base00 |
||||
|
||||
# Background color of the statusbar in passthrough mode. |
||||
c.colors.statusbar.passthrough.bg = base0C |
||||
|
||||
# Foreground color of the statusbar in private browsing mode. |
||||
c.colors.statusbar.private.fg = base00 |
||||
|
||||
# Background color of the statusbar in private browsing mode. |
||||
c.colors.statusbar.private.bg = base03 |
||||
|
||||
# Foreground color of the statusbar in command mode. |
||||
c.colors.statusbar.command.fg = base05 |
||||
|
||||
# Background color of the statusbar in command mode. |
||||
c.colors.statusbar.command.bg = base00 |
||||
|
||||
# Foreground color of the statusbar in private browsing + command mode. |
||||
c.colors.statusbar.command.private.fg = base05 |
||||
|
||||
# Background color of the statusbar in private browsing + command mode. |
||||
c.colors.statusbar.command.private.bg = base00 |
||||
|
||||
# Foreground color of the statusbar in caret mode. |
||||
c.colors.statusbar.caret.fg = base00 |
||||
|
||||
# Background color of the statusbar in caret mode. |
||||
c.colors.statusbar.caret.bg = base0E |
||||
|
||||
# Foreground color of the statusbar in caret mode with a selection. |
||||
c.colors.statusbar.caret.selection.fg = base00 |
||||
|
||||
# Background color of the statusbar in caret mode with a selection. |
||||
c.colors.statusbar.caret.selection.bg = base0D |
||||
|
||||
# Background color of the progress bar. |
||||
c.colors.statusbar.progress.bg = base0D |
||||
|
||||
# Default foreground color of the URL in the statusbar. |
||||
c.colors.statusbar.url.fg = base05 |
||||
|
||||
# Foreground color of the URL in the statusbar on error. |
||||
c.colors.statusbar.url.error.fg = base08 |
||||
|
||||
# Foreground color of the URL in the statusbar for hovered links. |
||||
c.colors.statusbar.url.hover.fg = base05 |
||||
|
||||
# Foreground color of the URL in the statusbar on successful load |
||||
# (http). |
||||
c.colors.statusbar.url.success.http.fg = base0C |
||||
|
||||
# Foreground color of the URL in the statusbar on successful load |
||||
# (https). |
||||
c.colors.statusbar.url.success.https.fg = base0B |
||||
|
||||
# Foreground color of the URL in the statusbar when there's a warning. |
||||
c.colors.statusbar.url.warn.fg = base0E |
||||
|
||||
# Background color of the tab bar. |
||||
c.colors.tabs.bar.bg = base00 |
||||
|
||||
# Color gradient start for the tab indicator. |
||||
c.colors.tabs.indicator.start = base0D |
||||
|
||||
# Color gradient end for the tab indicator. |
||||
c.colors.tabs.indicator.stop = base0C |
||||
|
||||
# Color for the tab indicator on errors. |
||||
c.colors.tabs.indicator.error = base08 |
||||
|
||||
# Foreground color of unselected odd tabs. |
||||
c.colors.tabs.odd.fg = base05 |
||||
|
||||
# Background color of unselected odd tabs. |
||||
c.colors.tabs.odd.bg = base00 |
||||
|
||||
# Foreground color of unselected even tabs. |
||||
c.colors.tabs.even.fg = base05 |
||||
|
||||
# Background color of unselected even tabs. |
||||
c.colors.tabs.even.bg = base00 |
||||
|
||||
# Background color of pinned unselected even tabs. |
||||
c.colors.tabs.pinned.even.bg = base03 |
||||
|
||||
# Foreground color of pinned unselected even tabs. |
||||
c.colors.tabs.pinned.even.fg = base05 |
||||
|
||||
# Background color of pinned unselected odd tabs. |
||||
c.colors.tabs.pinned.odd.bg = base03 |
||||
|
||||
# Foreground color of pinned unselected odd tabs. |
||||
c.colors.tabs.pinned.odd.fg = base05 |
||||
|
||||
# Background color of pinned selected even tabs. |
||||
c.colors.tabs.pinned.selected.even.bg = "#cc241d" |
||||
|
||||
# Foreground color of pinned selected even tabs. |
||||
c.colors.tabs.pinned.selected.even.fg = base00 |
||||
|
||||
# Background color of pinned selected odd tabs. |
||||
c.colors.tabs.pinned.selected.odd.bg = "#cc241d" |
||||
|
||||
# Foreground color of pinned selected odd tabs. |
||||
c.colors.tabs.pinned.selected.odd.fg = base00 |
||||
|
||||
# Foreground color of selected odd tabs. |
||||
c.colors.tabs.selected.odd.fg = base00 |
||||
|
||||
# Background color of selected odd tabs. |
||||
c.colors.tabs.selected.odd.bg = "#cc241d" |
||||
|
||||
# Foreground color of selected even tabs. |
||||
c.colors.tabs.selected.even.fg = base00 |
||||
|
||||
# Background color of selected even tabs. |
||||
c.colors.tabs.selected.even.bg = "#cc241d" |
||||
|
||||
# Background color for webpages if unset (or empty to use the theme's color). |
||||
c.colors.webpage.bg = base00 |
@ -1,62 +0,0 @@
|
||||
# pylint: disable=C0111 |
||||
import os, operator |
||||
from qutebrowser.api import interceptor, message |
||||
|
||||
config = config # noqa: F821 pylint: disable=E0602,C0103,W0127 |
||||
c = c # noqa: F821 pylint: disable=E0602,C0103,W0127 |
||||
|
||||
### ricing |
||||
config.source("/etc/nixos/config/qutebrowser/colors.py") |
||||
|
||||
c.fonts.default_family = "IBM Plex Mono" |
||||
c.tabs.position = 'top' |
||||
c.tabs.show = 'multiple' |
||||
c.tabs.title.format = '{current_title}' |
||||
c.tabs.title.alignment = 'center' |
||||
c.downloads.position = 'bottom' |
||||
c.tabs.favicons.show = 'never' |
||||
c.tabs.indicator.width = 0 |
||||
|
||||
def make_padding(top, bottom, left, right): |
||||
return { |
||||
'top': top, |
||||
'bottom': bottom, |
||||
'left': left, |
||||
'right': right |
||||
} |
||||
|
||||
c.tabs.padding = make_padding(3, 3, 0, 0) |
||||
c.tabs.indicator.padding = make_padding(0, 0, 0, 0) |
||||
|
||||
### behavior |
||||
if 'EDITOR' in os.environ: |
||||
c.editor.command = [os.environ['EDITOR'] + ' "{}"'] |
||||
|
||||
# trick some stupid apps |
||||
c.content.headers.user_agent = "Mozilla/5.0 ({os_info}) AppleWebKit/{webkit_version} (KHTML, like Gecko) {qt_key}/{qt_version} {upstream_browser_key}/{upstream_browser_version} Safari/{webkit_version}" |
||||
|
||||
REDIRECT_MAP = { |
||||
"reddit.com": operator.methodcaller('setHost', 'old.reddit.com'), |
||||
"www.reddit.com": operator.methodcaller('setHost', 'old.reddit.com'), |
||||
} |
||||
|
||||
def redirect_intercept(info): |
||||
"""Block the given request if necessary.""" |
||||
if (info.resource_type != interceptor.ResourceType.main_frame |
||||
or info.request_url.scheme() in {"data", "blob"}): |
||||
return |
||||
url = info.request_url |
||||
redir = REDIRECT_MAP.get(url.host()) |
||||
if redir is not None and redir(url) is not False: |
||||
message.info("Redirecting to " + url.toString()) |
||||
info.redirect(url) |
||||
|
||||
interceptor.register(redirect_intercept) |
||||
|
||||
### bindings |
||||
def nmap(key, command): |
||||
"""Bind key to command in normal mode.""" |
||||
config.bind(key, command, mode='normal') |
||||
|
||||
nmap(',m', 'spawn mpv {url}') |
||||
nmap(',M', 'hint links spawn mpv {hint-url}') |
@ -1,302 +0,0 @@
|
||||
#!/usr/bin/env cached-nix-shell |
||||
#! nix-shell -p keyutils -p python37Packages.pyperclip -p python37Packages.tldextract -i python3 |
||||
# Copyright 2017 Chris Braun (cryzed) <cryzed@googlemail.com> |
||||
# Adapted for Bitwarden by Jonathan Haylett (JonnyHaystack) <jonathan@haylett.dev> |
||||
# |
||||
# This file is part of qutebrowser. |
||||
# |
||||
# qutebrowser is free software: you can redistribute it and/or modify |
||||
# it under the terms of the GNU General Public License as published bjy |
||||
# the Free Software Foundation, either version 3 of the License, or |
||||
# (at your option) any later version. |
||||
# |
||||
# qutebrowser is distributed in the hope that it will be useful, |
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
# GNU General Public License for more details. |
||||
# |
||||
# You should have received a copy of the GNU General Public License |
||||
# along with qutebrowser. If not, see <http://www.gnu.org/licenses/>. |
||||
|
||||
""" |
||||
Insert login information using Bitwarden CLI and a dmenu-compatible application |
||||
(e.g. dmenu, rofi -dmenu, ...). |
||||
""" |
||||
|
||||
USAGE = """The domain of the site has to be in the name of the Bitwarden entry, for example: "github.com/cryzed" or |
||||
"websites/github.com". The login information is inserted by emulating key events using qutebrowser's fake-key command in this manner: |
||||
[USERNAME]<Tab>[PASSWORD], which is compatible with almost all login forms. |
||||
|
||||
If enabled, with the `--totp` flag, it will also move the TOTP code to the |
||||
clipboard, much like the Firefox add-on. |
||||
|
||||
You must log into Bitwarden CLI using `bw login` prior to use of this script. |
||||
The session key will be stored using keyctl for the number of seconds passed to |
||||
the --auto-lock option. |
||||
|
||||
To use in qutebrowser, run: `spawn --userscript qute-bitwarden` |
||||
""" |
||||
|
||||
EPILOG = """Dependencies: tldextract (Python 3 module), pyperclip (optional |
||||
Python module, used for TOTP codes), Bitwarden CLI (1.7.4 is known to work |
||||
but older versions may well also work) |
||||
|
||||
WARNING: The login details are viewable as plaintext in qutebrowser's debug log |
||||
(qute://log) and might be shared if you decide to submit a crash report!""" |
||||
|
||||
import argparse |
||||
import enum |
||||
import functools |
||||
import os |
||||
import shlex |
||||
import subprocess |
||||
import sys |
||||
import json |
||||
import tldextract |
||||
|
||||
argument_parser = argparse.ArgumentParser( |
||||
description=__doc__, |
||||
usage=USAGE, |
||||
epilog=EPILOG, |
||||
) |
||||
argument_parser.add_argument('url', nargs='?', default=os.getenv('QUTE_URL')) |
||||
argument_parser.add_argument('--dmenu-invocation', '-d', default='rofi -dmenu -i -p Bitwarden', |
||||
help='Invocation used to execute a dmenu-provider') |
||||
argument_parser.add_argument('--no-insert-mode', '-n', dest='insert_mode', action='store_false', |
||||
help="Don't automatically enter insert mode") |
||||
argument_parser.add_argument('--totp', '-t', action='store_true', |
||||
help="Copy TOTP key to clipboard") |
||||
argument_parser.add_argument('--io-encoding', '-i', default='UTF-8', |
||||
help='Encoding used to communicate with subprocesses') |
||||
argument_parser.add_argument('--merge-candidates', '-m', action='store_true', |
||||
help='Merge pass candidates for fully-qualified and registered domain name') |
||||
argument_parser.add_argument('--auto-lock', type=int, default=900, |
||||
help='Automatically lock the vault after this many seconds') |
||||
group = argument_parser.add_mutually_exclusive_group() |
||||
group.add_argument('--username-only', '-e', |
||||
action='store_true', help='Only insert username') |
||||
group.add_argument('--password-only', '-w', |
||||
action='store_true', help='Only insert password') |
||||
group.add_argument('--totp-only', '-T', |
||||
action='store_true', help='Only insert totp code') |
||||
|
||||
stderr = functools.partial(print, file=sys.stderr) |
||||
|
||||
|
||||
class ExitCodes(enum.IntEnum): |
||||
SUCCESS = 0 |
||||
FAILURE = 1 |
||||
# 1 is automatically used if Python throws an exception |
||||
NO_PASS_CANDIDATES = 2 |
||||
COULD_NOT_MATCH_USERNAME = 3 |
||||
COULD_NOT_MATCH_PASSWORD = 4 |
||||
|
||||
|
||||
def qute_command(command): |
||||
with open(os.environ['QUTE_FIFO'], 'w') as fifo: |
||||
fifo.write(command + '\n') |
||||
fifo.flush() |
||||
|
||||
|
||||
def ask_password(): |
||||
process = subprocess.run([ |
||||
'rofi', |
||||
'-dmenu', |
||||
'-p', |
||||
'Master Password', |
||||
'-password', |
||||
'-lines', |
||||
'0', |
||||
], universal_newlines=True, stdout=subprocess.PIPE) |
||||
if process.returncode > 0: |
||||
raise Exception('Could not unlock vault') |
||||
master_pass = process.stdout.strip() |
||||
return subprocess.check_output( |
||||
['bw', 'unlock', '--raw', master_pass], |
||||
universal_newlines=True, |
||||
).strip() |
||||
|
||||
|
||||
def get_session_key(auto_lock): |
||||
if auto_lock == 0: |
||||
subprocess.call(['keyctl', 'purge', 'user', 'bw_session']) |
||||
return ask_password() |
||||
else: |
||||
process = subprocess.run( |
||||
['keyctl', 'request', 'user', 'bw_session'], |
||||
universal_newlines=True, |
||||
stdout=subprocess.PIPE, |
||||
) |
||||
key_id = process.stdout.strip() |
||||
if process.returncode > 0: |
||||
session = ask_password() |
||||
if not session: |
||||
raise Exception('Could not unlock vault') |
||||
key_id = subprocess.check_output( |
||||
['keyctl', 'add', 'user', 'bw_session', session, '@u'], |
||||
universal_newlines=True, |
||||
).strip() |
||||
|
||||
if auto_lock > 0: |
||||
subprocess.call(['keyctl', 'timeout', str(key_id), str(auto_lock)]) |
||||
return subprocess.check_output( |
||||
['keyctl', 'pipe', str(key_id)], |
||||
universal_newlines=True, |
||||
).strip() |
||||
|
||||
|
||||
def pass_(domain, encoding, auto_lock): |
||||
session_key = get_session_key(auto_lock) |
||||
process = subprocess.run( |
||||
['bw', 'list', 'items', '--session', session_key, '--url', domain], |
||||
stdout=subprocess.PIPE, |
||||
stderr=subprocess.PIPE, |
||||
) |
||||
|
||||
err = process.stderr.decode(encoding).strip() |
||||
if err: |
||||
msg = 'Bitwarden CLI returned for {:s} - {:s}'.format(domain, err) |
||||
stderr(msg) |
||||
return '[]' |
||||
|
||||
out = process.stdout.decode(encoding).strip() |
||||
|
||||
return out |
||||
|
||||
|
||||
def get_totp_code(selection_id, domain_name, encoding, auto_lock): |
||||
session_key = get_session_key(auto_lock) |
||||
process = subprocess.run( |
||||
['bw', 'get', 'totp', '--session', session_key, selection_id], |
||||
stdout=subprocess.PIPE, |
||||
stderr=subprocess.PIPE, |
||||
) |
||||
|
||||
err = process.stderr.decode(encoding).strip() |
||||
if err: |
||||
# domain_name instead of selection_id to make it more user-friendly |
||||
msg = 'Bitwarden CLI returned for {:s} - {:s}'.format(domain_name, err) |
||||
stderr(msg) |
||||
return '[]' |
||||
|
||||
out = process.stdout.decode(encoding).strip() |
||||
|
||||
return out |
||||
|
||||
|
||||
def dmenu(items, invocation, encoding): |
||||
command = shlex.split(invocation) |
||||
process = subprocess.run(command, input='\n'.join( |
||||
items).encode(encoding), stdout=subprocess.PIPE) |
||||
return process.stdout.decode(encoding).strip() |
||||
|
||||
|
||||
def fake_key_raw(text): |
||||
for character in text: |
||||
# Escape all characters by default, space requires special handling |
||||
sequence = '" "' if character == ' ' else '\{}'.format(character) |
||||
qute_command('fake-key {}'.format(sequence)) |
||||
|
||||
|
||||
def main(arguments): |
||||
if not arguments.url: |
||||
argument_parser.print_help() |
||||
return ExitCodes.FAILURE |
||||
|
||||
extract_result = tldextract.extract(arguments.url) |
||||
|
||||
# Try to find candidates using targets in the following order: fully-qualified domain name (includes subdomains), |
||||
# the registered domain name and finally: the IPv4 address if that's what |
||||
# the URL represents |
||||
candidates = [] |
||||
for target in filter(None, [ |
||||
extract_result.fqdn, |
||||
extract_result.registered_domain, |
||||
extract_result.subdomain + extract_result.domain, |
||||
extract_result.domain, |
||||
extract_result.ipv4]): |
||||
target_candidates = json.loads( |
||||
pass_( |
||||
target, |
||||
arguments.io_encoding, |
||||
arguments.auto_lock, |
||||
) |
||||
) |
||||
if not target_candidates: |
||||
continue |
||||
|
||||
candidates = candidates + target_candidates |
||||
if not arguments.merge_candidates: |
||||
break |
||||
else: |
||||
if not candidates: |
||||
stderr('No pass candidates for URL {!r} found!'.format( |
||||
arguments.url)) |
||||
return ExitCodes.NO_PASS_CANDIDATES |
||||
|
||||
if len(candidates) == 1: |
||||
selection = candidates.pop() |
||||
else: |
||||
choices = ['{:s} | {:s}'.format(c['name'], c['login']['username']) for c in candidates] |
||||
choice = dmenu(choices, arguments.dmenu_invocation, arguments.io_encoding) |
||||
choice_tokens = choice.split('|') |
||||
choice_name = choice_tokens[0].strip() |
||||
choice_username = choice_tokens[1].strip() |
||||
selection = next((c for (i, c) in enumerate(candidates) |
||||
if c['name'] == choice_name |
||||
and c['login']['username'] == choice_username), |
||||
None) |
||||
|
||||
# Nothing was selected, simply return |
||||
if not selection: |
||||
return ExitCodes.SUCCESS |
||||
|
||||
username = selection['login']['username'] |
||||
password = selection['login']['password'] |
||||
totp = selection['login']['totp'] |
||||
|
||||
if arguments.username_only: |
||||
fake_key_raw(username) |
||||
elif arguments.password_only: |
||||
fake_key_raw(password) |
||||
elif arguments.totp_only: |
||||
# No point in moving it to the clipboard in this case |
||||
fake_key_raw( |
||||
get_totp_code( |
||||
selection['id'], |
||||
selection['name'], |
||||
arguments.io_encoding, |
||||
arguments.auto_lock |
||||
) |
||||
) |
||||
else: |
||||
# Enter username and password using fake-key and <Tab> (which seems to work almost universally), then switch |
||||
# back into insert-mode, so the form can be directly submitted by |
||||
# hitting enter afterwards |
||||
fake_key_raw(username) |
||||
qute_command('fake-key <Tab>') |
||||
fake_key_raw(password) |
||||
|
||||
if arguments.insert_mode: |
||||
qute_command('enter-mode insert') |
||||
|
||||
# If it finds a TOTP code, it copies it to the clipboard, |
||||
# which is the same behaviour as the Firefox add-on. |
||||
if not arguments.totp_only and totp and arguments.totp: |
||||
# The import is done here, to make pyperclip an optional dependency |
||||
import pyperclip |
||||
pyperclip.copy( |
||||
get_totp_code( |
||||
selection['id'], |
||||
selection['name'], |
||||
arguments.io_encoding, |
||||
arguments.auto_lock |
||||
) |
||||
) |
||||
|
||||
return ExitCodes.SUCCESS |
||||
|
||||
|
||||
if __name__ == '__main__': |
||||
arguments = argument_parser.parse_args() |
||||
sys.exit(main(arguments)) |
@ -1,3 +0,0 @@
|
||||
_a basic term-like startpage with tree structure_ |
||||
|
||||
https://notabug.org/nytly/home lightly modified |
@ -1,177 +0,0 @@
|
||||
<!DOCTYPE html> |
||||
<html> |
||||
<head> |
||||
<meta charset="UTF-8"> |
||||
<!-- new tab override ext --> |
||||
<style> |
||||
:root { |
||||
--font: "IBM Plex Mono"; |
||||
--background: #fbf1c7; |
||||
--foreground: #3c3836; |
||||
--aqua: #689d6a; |
||||
--yellow: #d79921; |
||||
--green: #98971a; |
||||
--red: #cc241d; |
||||
--branch: 1px solid #928374; |
||||
} |
||||
|
||||
html { |
||||
font-size: 18px; |
||||
} |
||||
|
||||
body { |
||||
background: var(--background); |
||||
} |
||||
|
||||
.container { |
||||
position: absolute; |
||||
top: 50%; |
||||
left: 45%; |
||||
transform: translate(-50%, -50%); |
||||
} |
||||
|
||||
.prompt { |
||||
font-family: var(--font); |
||||
color: var(--foreground); |
||||
} |
||||
|
||||
.prompt~.prompt { |
||||
padding: 1.3rem 0 0.3125rem; |
||||
} |
||||
|
||||
span { |
||||
color: var(--yellow); |
||||
} |
||||
|
||||
.hostname { |
||||
color: var(--green); |
||||
} |
||||
|
||||
.dir { |
||||
color: var(--aqua); |
||||
} |
||||
|
||||
h1 { |
||||
display: inline; |
||||
font-family: var(--font); |
||||
font-size: 1rem; |
||||
font-weight: normal; |
||||
color: var(--aqua); |
||||
} |
||||
|
||||
.tree > ul { |
||||
margin: 0; |
||||
padding-left: 1rem; |
||||
} |
||||
|
||||
ul { |
||||
list-style: none; |
||||
padding-left: 2.5rem; |
||||
} |
||||
|
||||
li { |
||||
position: relative; |
||||
} |
||||
|
||||
li::before, li::after { |
||||
content: ""; |
||||
position: absolute; |
||||
left: -0.75rem; |
||||
} |
||||
|
||||
li::before { |
||||
border-top: var(--branch); |
||||
top: 0.75rem; |
||||
width: 0.5rem; |
||||
} |
||||
|
||||
li::after { |
||||
border-left: var(--branch); |
||||
height: 100%; |
||||
top: 0.25rem; |
||||
} |
||||
|
||||
li:last-child::after { |
||||
height: 0.5rem; |
||||
} |
||||
|
||||
a { |
||||
font-family: var(--font); |
||||
font-size: 1rem; |
||||
color: var(--foreground); |
||||
text-decoration: none; |
||||
outline: none; |
||||
} |
||||
|
||||
a:hover { |
||||
color: var(--background); |
||||
background: var(--red); |
||||
} |
||||
|
||||
form h1 { |
||||
padding-left: 0.125rem; |
||||
} |
||||
|
||||
input { |
||||
font-family: var(--font); |
||||
font-size: 1rem; |
||||
color: var(--foreground); |
||||
background-color: var(--background); |
||||
border: none; |
||||
} |
||||
</style> |
||||
<title>~</title> |
||||
</head> |
||||
<body> |
||||
<div class="container"> |
||||
<div class="prompt"><span>hazel</span> on <span class="hostname">lucy</span> in <span class="dir">~</span> |
||||
<br> |
||||
<span>λ</span> tree</div> |
||||
<div class="tree"> |
||||
<h1>.</h1> |
||||
<ul> |
||||
<li> |
||||
<h1>school</h1> |
||||
<ul> |
||||
<li><a href="https://one.iu.edu">oneiu</a></li> |
||||
<li><a href="https://iu.instructure.com">canvas</a></li> |
||||
<li><a href="https://sci-hub.se">sci-hub</a></li> |
||||
</ul> |
||||
</li> |
||||
<li> |
||||
<h1>social</h1> |
||||
<ul> |
||||
<li><a href="https://is.nota.live">mastodon</a></li> |
||||
<li><a href="https://discord.com/channels/@me">gamersite</a></li> |
||||
<li><a href="https://lobste.rs">lobsters</a></li> |
||||
<li><a href="https://beta.protonmail.com">protonmail</a></li> |
||||
</ul> |
||||
</li> |
||||
<li> |
||||
<h1>code</h1> |
||||
<ul> |
||||
<li><a href="https://git.knightsofthelambdacalcul.us">gitea</a></li> |
||||
<li><a href="https://github.com">github</a></li> |
||||
<li><a href="https://nixos.org/nixos/options.html">options</a></li> |
||||
<li><a href="https://hackthebox.eu">htb</a></li> |
||||
</ul> |
||||
</li> |
||||
<li> |
||||
<h1>misc</h1> |
||||
<ul> |
||||
<li><a href="https://cloud.knightsofthelambdacalcul.us">nextcloud</a></li> |
||||
<li><a href="https://youtube.com">timewaster</a></li> |
||||
</ul> |
||||
</li> |
||||
</ul> |
||||
</div> |
||||
<div class="prompt"><span>hazel</span> on <span class="hostname">lucy</span> in <span class="dir">~</span> |
||||
<br> |
||||
<span>λ</span> ddg</div> |
||||
<form action="https://duckduckgo.com/" method="GET"> |
||||
<h1>search: </h1> |
||||
<input type="text" name="q" autofocus="autofocus"> |
||||
</form> |
||||
</div> |
||||
</body> |
||||
</html> |
@ -1,31 +0,0 @@
|
||||
" nice |
||||
colors shydactyl |
||||
|
||||
" self-explanatory |
||||
set searchengine duckduckgo |
||||
set historyresults 10 |
||||
|
||||
" the irony is not lost on me |
||||
js tri.browserBg.runtime.getPlatformInfo().then(os=>{const editorcmd = os.os=="linux" ? "emacs" : "auto"; tri.config.set("editorcmd", editorcmd)}) |
||||
|
||||
" only hint search results on google & ddg |
||||
bindurl www.google.com f hint -Jc .rc > .r > a |
||||
bindurl www.google.com F hint -Jbc .rc>.r>a |
||||
|
||||
bindurl ^https://duckduckgo.com f hint -Jc [class=result__a] |
||||
bindurl ^https://duckduckgo.com F hint -Jbc [class=result__a] |
||||
|
||||
" better hinting |
||||
set hintfiltermode vimperator-reflow |
||||
set hintnames numeric |
||||
|
||||
" inject google translate upon `:translate` cmd |
||||
" again, irony not lost on me. |
||||
" also, for the record, Tridactyl doesn't support multi-line JS |
||||
command translate js let googleTranslateCallback = document.createElement('script'); googleTranslateCallback.innerHTML = "function googleTranslateElementInit(){ new google.translate.TranslateElement(); }"; document.body.insertBefore(googleTranslateCallback, document.body.firstChild); let googleTranslateScript = document.createElement('script'); googleTranslateScript.charset="UTF-8"; googleTranslateScript.src = "https://translate.google.com/translate_a/element.js?cb=googleTranslateElementInit&tl=&sl=&hl="; document.body.insertBefore(googleTranslateScript, document.body.firstChild); |
||||
|
||||
" quickref: https://quickref.dev |
||||
set searchurls.qrf https://quickref.dev/search?type=all&q= |
||||
|
||||
" new reddit is bad |
||||
autocmd DocStart ^http(s?)://www.reddit.com js tri.excmds.urlmodify("-t", "www", "old") |
@ -1,74 +0,0 @@
|
||||
* { |
||||
font-size: 12px; |
||||
font-family: "IBM Plex Sans", "FontAwesome"; |
||||
} |
||||
|
||||
window#waybar { |
||||
background: rgba(0,0,0,0); |
||||
} |
||||
|
||||
#window { |
||||
margin: 3px; |
||||
padding: 5px 7px 5px 7px; |
||||
border-radius: 10px; |
||||
background: #ebdbb2; |
||||
color: #3c3836; |
||||
} |
||||
|
||||
#battery { |
||||
margin: 3px 0px 3px 0px; |
||||
background: #ebdbb2; |
||||
padding: 5px; |
||||
color: #3c3836; |
||||
} |
||||
|
||||
#custom-vpn { |
||||
margin: 3px 0px 3px 0px; |
||||
background: #ebdbb2; |
||||
padding: 5px; |
||||
color: #3c3836; |
||||
} |
||||
|
||||
#battery.BAT0 { |
||||
margin: 3px 0px 3px 0px; |
||||
background: #ebdbb2; |
||||
padding: 5px; |
||||
border-top-right-radius: 10px; |
||||
border-bottom-right-radius: 10px; |
||||
color: #3c3836; |
||||
} |
||||
|
||||
#clock { |
||||
margin: 3px; |
||||
color: #FFF; |
||||
background: #ebdbb2; |
||||
border-radius: 10px; |
||||
padding: 5px 7px 5px 7px; |
||||
color: #3c3836; |
||||
} |
||||
|
||||
#mpd { |
||||
margin: 3px; |
||||
padding: 5px 7px 5px 7px; |
||||
border-radius: 10px; |
||||
background: #ebdbb2; |
||||
color: #3c3836; |
||||
} |
||||
|
||||
#network { |
||||
background: #ebdbb2; |
||||
color: #3c3836; |
||||
margin: 3px 0px 3px 0px; |
||||
padding: 5px; |
||||
border-top-left-radius: 10px; |
||||
border-bottom-left-radius: 10px; |
||||
} |
||||
|
||||
#tray { |
||||
margin: 3px; |
||||
color: #FFF; |
||||
background: #ebdbb2; |
||||
border-radius: 10px; |
||||
padding: 5px 7px 5px 7px; |
||||
color: #3c3836; |
||||
} |
@ -1,31 +0,0 @@
|
||||
set window-title-home-tilde true |
||||
set statusbar-basename true |
||||
set selection-clipboard clipboard |
||||
|
||||
set font "Julia Mono 10" |
||||
|
||||
set completion-bg "#fbf1c7" |
||||
set completion-fg "#3c3836" |
||||
set completion-group-bg "#fbf1c7" |
||||
set completion-group-fg "#8f6f8f" |
||||
set completion-highlight-bg "#3c3836" |
||||
set completion-highlight-fg "#fbf1c7" |
||||
set recolor-lightcolor "#fbf1c7" |
||||
set recolor-darkcolor "#3c3836" |
||||
set default-bg "#fbf1c7" |
||||
set inputbar-bg "#fbf1c7" |
||||
set inputbar-fg "#3c3836" |
||||
set notification-bg "#fbf1c7" |
||||
set notification-fg "#3c3836" |
||||
set notification-error-bg "aa4450" |
||||
set notification-error-fg "#3c3836" |
||||
set notification-warning-bg "aa4450" |
||||
set notification-warning-fg "#3c3836" |
||||
set statusbar-bg "#fbf1c7" |
||||
set statusbar-fg "#3c3836" |
||||
set index-bg "#fbf1c7" |
||||
set index-fg "#3c3836" |
||||
set index-active-bg "#3c3836" |
||||
set index-active-fg "#fbf1c7" |
||||
set render-loading-bg "#fbf1c7" |
||||
set render-loading-fg "#3c3836" |
Loading…
Reference in new issue