Compare commits
29 Commits
example-po
...
63ee80ae98
Author | SHA1 | Date | |
---|---|---|---|
63ee80ae98
|
|||
6ca71e0ff7
|
|||
ae59d03f81
|
|||
83f780a8b4
|
|||
a235ec2151
|
|||
054a2258f5
|
|||
66833ca13d
|
|||
9378412a09
|
|||
ef2274521e
|
|||
fef9c0895e
|
|||
aa1c520d55
|
|||
8a2a77bba3
|
|||
fff1bdd0de
|
|||
6878e125e1
|
|||
3a8b1c6a8d
|
|||
afcaa99cf5
|
|||
cb44bb4b87
|
|||
e3fc548034
|
|||
fbde75e8c6
|
|||
e84980adcb
|
|||
46c1660d52
|
|||
9094e37b08
|
|||
e7637b186e
|
|||
edd7f8b030
|
|||
febefb8c67
|
|||
28b2a2eff8
|
|||
e68c00a4e2
|
|||
42eed53cef
|
|||
7c568ef4d5
|
24
.drone.yml
Normal file
24
.drone.yml
Normal file
@ -0,0 +1,24 @@
|
||||
---
|
||||
kind: pipeline
|
||||
type: docker
|
||||
name: Deploy to bbaovanc.com
|
||||
|
||||
steps:
|
||||
- name: Build site
|
||||
image: mapitman/docker-hugo
|
||||
commands:
|
||||
- hugo version
|
||||
- hugo --minify
|
||||
|
||||
- name: Upload files
|
||||
image: appleboy/drone-scp
|
||||
aettings:
|
||||
host: bbaovanc.com
|
||||
port: 2222
|
||||
username: droneci
|
||||
key:
|
||||
from_secret: SSH_KEY
|
||||
target: /var/www/bbaovanc/blog
|
||||
rm: true
|
||||
source:
|
||||
- public/*
|
11
.editorconfig
Normal file
11
.editorconfig
Normal file
@ -0,0 +1,11 @@
|
||||
root = true
|
||||
|
||||
[*.{md,toml}]
|
||||
end_of_line = lf
|
||||
insert_final_newline = true
|
||||
indent_style = space
|
||||
indent_size = 2
|
||||
trim_trailing_whitespace = true
|
||||
|
||||
[*.md]
|
||||
max_line_length = 80
|
12
Makefile
Normal file
12
Makefile
Normal file
@ -0,0 +1,12 @@
|
||||
all: public
|
||||
|
||||
public:
|
||||
hugo
|
||||
|
||||
clean:
|
||||
rm -rf public
|
||||
|
||||
push: clean public
|
||||
rsync -arvz -e 'ssh -p 2222' --progress --delete public/ bbaovanc.com:/var/www/bbaovanc/blog/
|
||||
|
||||
.PHONY: all clean push
|
134
config.toml
134
config.toml
@ -2,72 +2,104 @@ baseURL = "https://bbaovanc.com/blog/"
|
||||
languageCode = "en-us"
|
||||
theme = "terminal"
|
||||
paginate = 5
|
||||
enableGitInfo = true
|
||||
|
||||
# [permalinks]
|
||||
# posts = "/:year/:month/:title/"
|
||||
# posts = "/:year/:month/:title/"
|
||||
|
||||
[params]
|
||||
# dir name of your main content (default is `content/posts`).
|
||||
# the list of set content will show up on your index page (baseurl).
|
||||
contentTypeName = "posts"
|
||||
# dir name of your main content (default is `content/posts`).
|
||||
# the list of set content will show up on your index page (baseurl).
|
||||
contentTypeName = "posts"
|
||||
|
||||
# ["orange", "blue", "red", "green", "pink"]
|
||||
themeColor = "blue"
|
||||
# ["orange", "blue", "red", "green", "pink"]
|
||||
themeColor = "blue"
|
||||
|
||||
# if you set this to 0, only submenu trigger will be visible
|
||||
showMenuItems = 2
|
||||
# if you set this to 0, only submenu trigger will be visible
|
||||
showMenuItems = 6
|
||||
|
||||
# show selector to switch language
|
||||
showLanguageSelector = false
|
||||
# show selector to switch language
|
||||
showLanguageSelector = false
|
||||
|
||||
# set theme to full screen width
|
||||
fullWidthTheme = false
|
||||
# set theme to full screen width
|
||||
fullWidthTheme = false
|
||||
|
||||
# center theme with default width
|
||||
centerTheme = true
|
||||
# center theme with default width
|
||||
centerTheme = true
|
||||
|
||||
# set a custom favicon (default is a `themeColor` square)
|
||||
favicon = "img/favicon.ico"
|
||||
# set a custom favicon (default is a `themeColor` square)
|
||||
favicon = "icon/favicon.ico"
|
||||
|
||||
# set post to show the last updated
|
||||
# If you use git, you can set `enableGitInfo` to `true` and then post will automatically get the last updated
|
||||
showLastUpdated = false
|
||||
# Provide a string as a prefix for the last update date. By default, it looks like this: 2020-xx-xx [Updated: 2020-xx-xx] :: Author
|
||||
# updatedDatePrefix = "Updated"
|
||||
# set post to show the last updated
|
||||
# If you use git, you can set `enableGitInfo` to `true` and then post will automatically get the last updated
|
||||
showLastUpdated = true
|
||||
# Provide a string as a prefix for the last update date. By default, it looks like this: 2020-xx-xx [Updated: 2020-xx-xx] :: Author
|
||||
# updatedDatePrefix = "Updated"
|
||||
|
||||
# set all headings to their default size (depending on browser settings)
|
||||
# it's set to `true` by default
|
||||
# oneHeadingSize = false
|
||||
# set all headings to their default size (depending on browser settings)
|
||||
# it's set to `true` by default
|
||||
# oneHeadingSize = false
|
||||
|
||||
[params.twitter]
|
||||
# set Twitter handles for Twitter cards
|
||||
# see https://developer.twitter.com/en/docs/tweets/optimize-with-cards/guides/getting-started#card-and-content-attribution
|
||||
# do not include @
|
||||
creator = ""
|
||||
site = ""
|
||||
# set Twitter handles for Twitter cards
|
||||
# see https://developer.twitter.com/en/docs/tweets/optimize-with-cards/guides/getting-started#card-and-content-attribution
|
||||
# do not include @
|
||||
creator = ""
|
||||
site = ""
|
||||
|
||||
[languages]
|
||||
[languages.en]
|
||||
languageName = "English"
|
||||
title = "bbaovanc's blog"
|
||||
subtitle = "My personal blog site"
|
||||
owner = "bbaovanc"
|
||||
keywords = ""
|
||||
copyright = ""
|
||||
menuMore = "Show more"
|
||||
readMore = "Read more"
|
||||
readOtherPosts = "Read other posts"
|
||||
newerPosts = "Newer posts"
|
||||
olderPosts = "Older posts"
|
||||
missingContentMessage = "Page not found..."
|
||||
missingBackButtonLabel = "Back to home page"
|
||||
[languages.en]
|
||||
languageName = "English"
|
||||
title = "bbaovanc's blog"
|
||||
subtitle = "My personal blog site"
|
||||
owner = "bbaovanc"
|
||||
keywords = ""
|
||||
copyright = ""
|
||||
menuMore = "Show more"
|
||||
readMore = "Read more"
|
||||
readOtherPosts = "Read other posts"
|
||||
newerPosts = "Newer posts"
|
||||
olderPosts = "Older posts"
|
||||
missingContentMessage = "Page not found..."
|
||||
missingBackButtonLabel = "Back to home page"
|
||||
|
||||
[languages.en.params.logo]
|
||||
logoText = "bbaovanc's blog"
|
||||
logoHomeLink = "/blog/"
|
||||
[languages.en.params.logo]
|
||||
logoText = "bbaovanc's blog"
|
||||
logoHomeLink = "/blog/"
|
||||
|
||||
[languages.en.menu]
|
||||
[[languages.en.menu.main]]
|
||||
identifier = "other-sites"
|
||||
name = "Other Sites"
|
||||
url = "/other-sites"
|
||||
[languages.en.menu]
|
||||
[[languages.en.menu.main]]
|
||||
identifier = "tags"
|
||||
name = "Tags"
|
||||
url = "/tags"
|
||||
weight = 10
|
||||
|
||||
[[languages.en.menu.main]]
|
||||
identifier = "links"
|
||||
name = "Links"
|
||||
url = "/links"
|
||||
weight = 20
|
||||
|
||||
[[languages.en.menu.main]]
|
||||
identifier = "rss"
|
||||
name = "RSS Feed"
|
||||
url = "/posts/index.xml"
|
||||
weight = 30
|
||||
|
||||
[[languages.en.menu.main]]
|
||||
identifier = "email-me"
|
||||
name = "Email Me"
|
||||
url = "mailto:contact@bbaovanc.com"
|
||||
weight = 40
|
||||
|
||||
[[languages.en.menu.main]]
|
||||
identifier = "main-website"
|
||||
name = "Main Website"
|
||||
url = "https://bbaovanc.com/"
|
||||
weight = 50
|
||||
|
||||
[[languages.en.menu.main]]
|
||||
identifier = "source-code"
|
||||
name = "Source Code"
|
||||
url = "https://git.bbaovanc.com/bbaovanc.com/blog"
|
||||
weight = 60
|
||||
|
41
content/links.md
Normal file
41
content/links.md
Normal file
@ -0,0 +1,41 @@
|
||||
---
|
||||
title: "Links"
|
||||
toc: true
|
||||
---
|
||||
|
||||
---
|
||||
|
||||
## Other
|
||||
|
||||
- [GitHub](https://github.com/BBaoVanC/)
|
||||
|
||||
## My Website
|
||||
|
||||
- [Main Site](https://bbaovanc.com/)
|
||||
- [Blog](https://bbaovanc.com/blog/)
|
||||
- [Status Page](https://status.bbaovanc.com/)
|
||||
- [Searx Instance](https://search.bbaovanc.com/) -
|
||||
[source code](https://github.com/BBaoVanC/searx)
|
||||
- [Gitea Instance](https://git.bbaovanc.com/)
|
||||
|
||||
## My Software
|
||||
|
||||
- [imgupload.py](https://github.com/imgupload-py/imgupload.py)
|
||||
- [pynamegen](https://git.bbaovanc.com/bbaovanc/pynamegen)
|
||||
- [libnamegen](https://git.bbaovanc.com/bbaovanc/libnamegen)
|
||||
- [liblistloader](https://git.bbaovanc.com/bbaovanc/liblistloader)
|
||||
- [libprogress](https://git.bbaovanc.com/bbaovanc/libprogress)
|
||||
|
||||
## My Configurations
|
||||
|
||||
- [dotfiles](https://github.com/BBaoVanC/dotfiles)
|
||||
- [dwm](https://github.com/BBaoVanC/.dwm)
|
||||
- [st](https://github.com/BBaoVanC/st)
|
||||
- [dwm-flexipatch](https://github.com/BBaoVanC/dwm-flexipatch)
|
||||
- [dwmblocks](https://github.com/BBaoVanC/dwmblocks)
|
||||
- [dmenu](https://github.com/BBaoVanC/dmenu)
|
||||
|
||||
### Old Configurations
|
||||
|
||||
- [dwm](https://github.com/BBaoVanC/dwm)
|
||||
- [xmonad](https://github.com/BBaoVanC/.xmonad)
|
@ -1,7 +0,0 @@
|
||||
---
|
||||
title: "Other Sites"
|
||||
draft: false
|
||||
---
|
||||
|
||||
- [GitHub](https://github.com/BBaoVanC)
|
||||
- [Gitea](https://git.bbaovanc.com)
|
@ -0,0 +1,68 @@
|
||||
+++
|
||||
title = "Allow Non Root Processes to Bind to Privileged Ports"
|
||||
date = "2021-03-28T20:03:16-05:00"
|
||||
author = "bbaovanc"
|
||||
tags = ["guide", "linux", "systemd"]
|
||||
keywords = ["linux", "privileged", "ports", "tutorial", "guide", "gitea",
|
||||
"systemd"]
|
||||
|
||||
description = """
|
||||
In Linux, processes cannot bind to privileged ports (<=1024) unless they are
|
||||
running as root. Here's how to allow any process to bind to privileged ports.
|
||||
"""
|
||||
|
||||
showFullContent = false
|
||||
toc = true
|
||||
+++
|
||||
|
||||
## Introduction
|
||||
|
||||
In Linux, processes cannot bind to privileged ports (<=1024) unless they are
|
||||
running as root. I learned about this when I was trying to add SSH cloning to my
|
||||
[Gitea](https://gitea.io) instance. This can be bypassed by giving
|
||||
`CAP_NET_BIND_SERVICE` capabilities to either the systemd service, or the
|
||||
executable itself.
|
||||
|
||||
## Giving `CAP_NET_BIND_SERVICE` capabilities
|
||||
|
||||
### Using systemd (preferred)
|
||||
|
||||
The best way is to tell systemd to give `CAP_NET_BIND_SERVICE`
|
||||
capabilities to the service. In fact, the Gitea systemd service has two
|
||||
lines[^1] that are commented out:
|
||||
|
||||
```systemd
|
||||
CapabilityBoundingSet=CAP_NET_BIND_SERVICE
|
||||
AmbientCapabilities=CAP_NET_BIND_SERVICE
|
||||
```
|
||||
|
||||
Uncommenting these two lines was all I had to do for Gitea.
|
||||
|
||||
### Using `setcap`
|
||||
|
||||
You can add `CAP_NET_BIND_SERVICE` to the executable directly using `setcap`,
|
||||
allowing it to bind to any port. Run the following command[^2]:
|
||||
|
||||
```bash
|
||||
setcap 'cap_net_bind_service=+ep' /path/to/program
|
||||
```
|
||||
|
||||
Note that this means that anyone with permission to run this program will be
|
||||
able to run it and bind to any privileged ports.
|
||||
|
||||
Other caveats[^2]:
|
||||
|
||||
> 1. You will need at least a 2.6.24 kernel
|
||||
> 2. This won't work if your file is a script. (ie, uses a #! line to launch an
|
||||
> interpreter). In this case, as far I as understand, you'd have to apply the
|
||||
> capability to the interpreter executable itself, which of course is a
|
||||
> security nightmare, since any program using that interpreter will have the
|
||||
> capability. I wasn't able to find any clean, easy way to work around this
|
||||
> problem.
|
||||
> 3. Linux will disable LD\_LIBRARY\_PATH on any program that has elevated
|
||||
> privileges like setcap or suid. So if your program uses its own .../lib/,
|
||||
> you might have to look into another option like port forwarding.
|
||||
|
||||
[^1]: https://github.com/go-gitea/gitea/blob/3416e2a82586fca4cd452b93237b979300f55d62/contrib/systemd/gitea.service#L69
|
||||
and https://stackoverflow.com/a/47065825
|
||||
[^2]: https://stackoverflow.com/a/414258
|
49
content/posts/checkra1n-gui-on-other-distros.md
Normal file
49
content/posts/checkra1n-gui-on-other-distros.md
Normal file
@ -0,0 +1,49 @@
|
||||
+++
|
||||
title = "Checkra1n GUI on Other Distros"
|
||||
date = "2021-03-25T21:19:51-05:00"
|
||||
author = "bbaovanc"
|
||||
cover = "/blog/media/checkra1n-gui-on-arch-linux.png"
|
||||
tags = ["guide", "linux", "archlinux", "jailbreak", "checkra1n"]
|
||||
keywords = ["checkra1n", "gui", "linux", "arch linux"]
|
||||
|
||||
description = """
|
||||
You can run the GUI version of checkra1n on non Debian-based distributions.
|
||||
"""
|
||||
|
||||
showFullContent = false
|
||||
toc = true
|
||||
+++
|
||||
|
||||
## Introduction
|
||||
|
||||
The official cross-distribution build of checkra1n only contains a CLI and TUI.
|
||||
However, the version available in the
|
||||
[checkra1n APT repository](https://checkra.in/linux) also contains a GTK-based
|
||||
GUI which can be accessed using the `--gui` flag, or the included
|
||||
`checkra1n.desktop` file.
|
||||
|
||||
## Other Distributions
|
||||
|
||||
First, download the Debian package available at
|
||||
`https://assets.checkra.in/debian/checkra1n_VERSION_amd64.deb` (as of writing,
|
||||
`VERSION` is currently `0.12.2`). Then, extract the `checkra1n` executable from
|
||||
the package, and install the correct shared libraries. Here are the most
|
||||
important ones, and their corresponding package names on Arch Linux:
|
||||
|
||||
- libimobiledevice-1.0.so.6 (`libimobiledevice`)
|
||||
- libirecovery-1.0.so.3 (`libirecovery`)
|
||||
- libtvcontrol.so (`libtvcontrol`)
|
||||
- libplist-2.0.so.3 (`libplist`)
|
||||
- libncurses.so.5 (`ncurses5-compat-libs`)
|
||||
|
||||
I found these by running the binary and then finding and installing the package
|
||||
that contained the shared object I was missing.
|
||||
|
||||
I also made an AUR package named
|
||||
[`checkra1n-gui`](https://aur.archlinux.org/packages/checkra1n-gui),
|
||||
which does all this automatically.
|
||||
|
||||
## Conclusion
|
||||
|
||||
As I expected, there is nothing preventing the checkra1n GUI from working on non
|
||||
Debian-based distributions (as far as I can tell).
|
29
content/posts/edited-in-middle-of-message-discord.md
Normal file
29
content/posts/edited-in-middle-of-message-discord.md
Normal file
@ -0,0 +1,29 @@
|
||||
+++
|
||||
title = "Put (edited) in the middle of a message in Discord"
|
||||
date = "2021-03-25T18:48:34-05:00"
|
||||
author = "bbaovanc"
|
||||
cover = "media/discord-tricks/edited-in-middle-of-message.png"
|
||||
tags = ["tutorial", "discord", "discord-tricks"]
|
||||
keywords = ["discord", "edited"]
|
||||
|
||||
description = """
|
||||
With a bit of trickery using the RLE character (U+202B), you can get the
|
||||
(edited) text on a message to be somewhere other than at the end of the message.
|
||||
"""
|
||||
|
||||
showFullContent = false
|
||||
+++
|
||||
|
||||
## Tutorial
|
||||
|
||||
1. Copy the "right-to-left embedding" character (U+202A) to your clipboard.
|
||||
2. Open editing box of a message
|
||||
3. Delete all text inside
|
||||
4. Paste the character
|
||||
5. Type the text you want on the right of `(edited)`
|
||||
6. Press space and paste the character
|
||||
7. Type the text you want on the left of `(edited)`
|
||||
|
||||
*This post was adapted from [gitea:bbaovanc/discord-tricks][1]*
|
||||
|
||||
[1]: https://git.bbaovanc.com/bbaovanc/discord-tricks
|
39
content/posts/new-comment-system.md
Normal file
39
content/posts/new-comment-system.md
Normal file
@ -0,0 +1,39 @@
|
||||
+++
|
||||
title = "New Comment System"
|
||||
date = "2021-04-11T00:17:13-05:00"
|
||||
author = "bbaovanc"
|
||||
tags = ["announcement", "hugo", "blog"]
|
||||
keywords = ["hugo", "comment system", "blog", "isso"]
|
||||
|
||||
description = """
|
||||
I added a comment system to my blog, using [Isso](https://posativ.org/isso/).
|
||||
"""
|
||||
|
||||
showFullContent = false
|
||||
toc = true
|
||||
+++
|
||||
|
||||
## About
|
||||
|
||||
I set up a comment system named [Isso](https://posativ.org/isso/) on my blog
|
||||
today. At the bottom of each blog post, there's a comment section. You don't
|
||||
need to sign up with an account or sign in with Google, Facebook, none of that
|
||||
junk. You can comment anonymously, or provide any of the following three fields:
|
||||
name, email address, and website, which will be shown to other people viewing
|
||||
your comment. I'm going off of the assumption that no one cares/is malicious
|
||||
enough to spam my comment sections.
|
||||
|
||||
## Known Issues
|
||||
|
||||
### Editing and deleting not working
|
||||
|
||||
You're supposed to be able to edit and delete comments up to 15 minutes after
|
||||
posting them. As of now, that doesn't seem to be working; the request just
|
||||
returns 403 (forbidden).
|
||||
|
||||
### White text on white background when previewing comment
|
||||
|
||||
This is a CSS related issue. This was also happening when editing/writing a
|
||||
comment, but I edited it so the edit box has black text. I think a better fix is
|
||||
to make the new comment form have a dark background, but I'll deal with that
|
||||
later.
|
29
content/posts/sed-text-substitution-in-discord.md
Normal file
29
content/posts/sed-text-substitution-in-discord.md
Normal file
@ -0,0 +1,29 @@
|
||||
+++
|
||||
title = "Text Substitution in Discord using `sed`"
|
||||
date = "2021-03-25T18:48:15-05:00"
|
||||
author = "bbaovanc"
|
||||
tags = ["tutorial", "discord", "discord-tricks"]
|
||||
keywords = ["discord", "sed", "text", "replacement"]
|
||||
|
||||
description = """
|
||||
Discord has (very primitive) support for text replacement using `sed` syntax.
|
||||
"""
|
||||
|
||||
showFullContent = false
|
||||
+++
|
||||
|
||||
## Tutorial
|
||||
|
||||
[Example Video](/blog/media/discord-tricks/sed-text-replacement.mov)
|
||||
|
||||
If you send a message using `sed` substitution format (`s/old text/new text`),
|
||||
Discord will execute it on the message you've last sent.
|
||||
|
||||
## Caveats
|
||||
|
||||
- Regex is not supported
|
||||
- Global substitution is not supported
|
||||
|
||||
*This post was adapted from [gitea:bbaovanc/discord-tricks][1]*
|
||||
|
||||
[1]: https://git.bbaovanc.com/bbaovanc/discord-tricks
|
274
layouts/partials/comments.html
Normal file
274
layouts/partials/comments.html
Normal file
@ -0,0 +1,274 @@
|
||||
<style>
|
||||
#isso-thread * {
|
||||
-webkit-box-sizing: border-box;
|
||||
-moz-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
#isso-thread .isso-comment-header a {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
#isso-thread {
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
}
|
||||
#isso-thread > h4 {
|
||||
color: #555;
|
||||
font-weight: bold;
|
||||
}
|
||||
#isso-thread > .isso-feedlink {
|
||||
float: right;
|
||||
padding-left: 1em;
|
||||
}
|
||||
#isso-thread > .isso-feedlink > a {
|
||||
font-size: 0.8em;
|
||||
vertical-align: bottom;
|
||||
}
|
||||
#isso-thread .textarea {
|
||||
color: black;
|
||||
min-height: 58px;
|
||||
outline: 0;
|
||||
}
|
||||
#isso-thread .textarea.placeholder {
|
||||
color: #757575;
|
||||
}
|
||||
|
||||
#isso-root .isso-comment {
|
||||
max-width: 68em;
|
||||
padding-top: 0.95em;
|
||||
margin: 0.95em auto;
|
||||
}
|
||||
#isso-root .preview .isso-comment {
|
||||
padding-top: 0;
|
||||
margin: 0;
|
||||
}
|
||||
#isso-root .isso-comment:not(:first-of-type),
|
||||
.isso-follow-up .isso-comment {
|
||||
border-top: 1px solid rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
.isso-comment > div.avatar {
|
||||
display: block;
|
||||
float: left;
|
||||
width: 7%;
|
||||
margin: 3px 15px 0 0;
|
||||
}
|
||||
.isso-comment > div.avatar > svg {
|
||||
max-width: 48px;
|
||||
max-height: 48px;
|
||||
border: 1px solid rgba(0, 0, 0, 0.2);
|
||||
border-radius: 3px;
|
||||
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
.isso-comment > div.text-wrapper {
|
||||
display: block;
|
||||
}
|
||||
.isso-comment .isso-follow-up {
|
||||
padding-left: calc(7% + 20px);
|
||||
}
|
||||
.isso-comment > div.text-wrapper > .isso-comment-header, .isso-comment > div.text-wrapper > .isso-comment-footer {
|
||||
font-size: 0.95em;
|
||||
}
|
||||
.isso-comment > div.text-wrapper > .isso-comment-header {
|
||||
font-size: 0.85em;
|
||||
}
|
||||
.isso-comment > div.text-wrapper > .isso-comment-header .spacer {
|
||||
padding: 0 6px;
|
||||
}
|
||||
.isso-comment > div.text-wrapper > .isso-comment-header .spacer,
|
||||
.isso-comment > div.text-wrapper > .isso-comment-header a.permalink,
|
||||
.isso-comment > div.text-wrapper > .isso-comment-header .note,
|
||||
.isso-comment > div.text-wrapper > .isso-comment-header a.parent {
|
||||
color: gray !important;
|
||||
font-weight: normal;
|
||||
text-shadow: none !important;
|
||||
}
|
||||
.isso-comment > div.text-wrapper > .isso-comment-header .spacer:hover,
|
||||
.isso-comment > div.text-wrapper > .isso-comment-header a.permalink:hover,
|
||||
.isso-comment > div.text-wrapper > .isso-comment-header .note:hover,
|
||||
.isso-comment > div.text-wrapper > .isso-comment-header a.parent:hover {
|
||||
color: #606060 !important;
|
||||
}
|
||||
.isso-comment > div.text-wrapper > .isso-comment-header .note {
|
||||
float: right;
|
||||
}
|
||||
.isso-comment > div.text-wrapper > .isso-comment-header .author {
|
||||
font-weight: bold;
|
||||
color: #555;
|
||||
}
|
||||
.isso-comment > div.text-wrapper > .textarea-wrapper .textarea,
|
||||
.isso-comment > div.text-wrapper > .textarea-wrapper .preview {
|
||||
margin-top: 0.2em;
|
||||
}
|
||||
.isso-comment > div.text-wrapper > div.text p {
|
||||
margin-top: 0.2em;
|
||||
}
|
||||
.isso-comment > div.text-wrapper > div.text p:last-child {
|
||||
margin-bottom: 0.2em;
|
||||
}
|
||||
.isso-comment > div.text-wrapper > div.text h1,
|
||||
.isso-comment > div.text-wrapper > div.text h2,
|
||||
.isso-comment > div.text-wrapper > div.text h3,
|
||||
.isso-comment > div.text-wrapper > div.text h4,
|
||||
.isso-comment > div.text-wrapper > div.text h5,
|
||||
.isso-comment > div.text-wrapper > div.text h6 {
|
||||
font-size: 130%;
|
||||
font-weight: bold;
|
||||
}
|
||||
.isso-comment > div.text-wrapper > div.textarea-wrapper .textarea,
|
||||
.isso-comment > div.text-wrapper > div.textarea-wrapper .preview {
|
||||
width: 100%;
|
||||
border: 1px solid #f0f0f0;
|
||||
border-radius: 2px;
|
||||
box-shadow: 0 0 2px #888;
|
||||
}
|
||||
.isso-comment > div.text-wrapper > .isso-comment-footer {
|
||||
font-size: 0.80em;
|
||||
color: gray !important;
|
||||
clear: left;
|
||||
}
|
||||
.isso-feedlink,
|
||||
.isso-comment > div.text-wrapper > .isso-comment-footer a {
|
||||
font-weight: bold;
|
||||
text-decoration: none;
|
||||
}
|
||||
.isso-feedlink:hover,
|
||||
.isso-comment > div.text-wrapper > .isso-comment-footer a:hover {
|
||||
color: #111111 !important;
|
||||
text-shadow: #aaaaaa 0 0 1px !important;
|
||||
}
|
||||
.isso-comment > div.text-wrapper > .isso-comment-footer > a {
|
||||
position: relative;
|
||||
top: .2em;
|
||||
}
|
||||
.isso-comment > div.text-wrapper > .isso-comment-footer > a + a {
|
||||
padding-left: 1em;
|
||||
}
|
||||
.isso-comment > div.text-wrapper > .isso-comment-footer .votes {
|
||||
color: gray;
|
||||
}
|
||||
.isso-comment > div.text-wrapper > .isso-comment-footer .upvote svg,
|
||||
.isso-comment > div.text-wrapper > .isso-comment-footer .downvote svg {
|
||||
position: relative;
|
||||
top: .2em;
|
||||
}
|
||||
.isso-comment .isso-postbox {
|
||||
margin-top: 0.8em;
|
||||
}
|
||||
.isso-comment.isso-no-votes > * > .isso-comment-footer span.votes {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.isso-postbox {
|
||||
max-width: 68em;
|
||||
margin: 0 auto 2em;
|
||||
clear: right;
|
||||
}
|
||||
.isso-postbox > .form-wrapper {
|
||||
display: block;
|
||||
padding: 0;
|
||||
}
|
||||
.isso-postbox > .form-wrapper > .auth-section,
|
||||
.isso-postbox > .form-wrapper > .auth-section .post-action {
|
||||
display: block;
|
||||
}
|
||||
.isso-postbox > .form-wrapper .textarea,
|
||||
.isso-postbox > .form-wrapper .preview {
|
||||
margin: 0 0 .3em;
|
||||
padding: .4em .8em;
|
||||
border-radius: 3px;
|
||||
background-color: #fff;
|
||||
border: 1px solid rgba(0, 0, 0, 0.2);
|
||||
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
.isso-postbox > .form-wrapper input[type=checkbox] {
|
||||
vertical-align: middle;
|
||||
position: relative;
|
||||
bottom: 1px;
|
||||
margin-left: 0;
|
||||
}
|
||||
.isso-postbox > .form-wrapper .notification-section {
|
||||
font-size: 0.90em;
|
||||
padding-top: .3em;
|
||||
}
|
||||
#isso-thread .textarea:focus,
|
||||
#isso-thread input:focus {
|
||||
border-color: rgba(0, 0, 0, 0.8);
|
||||
}
|
||||
.isso-postbox > .form-wrapper > .auth-section .input-wrapper {
|
||||
display: inline-block;
|
||||
position: relative;
|
||||
max-width: 25%;
|
||||
margin: 0;
|
||||
}
|
||||
.isso-postbox > .form-wrapper > .auth-section .input-wrapper input {
|
||||
padding: .3em 10px;
|
||||
max-width: 100%;
|
||||
border-radius: 3px;
|
||||
background-color: #fff;
|
||||
line-height: 1.4em;
|
||||
border: 1px solid rgba(0, 0, 0, 0.2);
|
||||
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
.isso-postbox > .form-wrapper > .auth-section .post-action {
|
||||
display: inline-block;
|
||||
float: right;
|
||||
margin: 0 0 0 5px;
|
||||
}
|
||||
.isso-postbox > .form-wrapper > .auth-section .post-action > input {
|
||||
padding: calc(.3em - 1px);
|
||||
border-radius: 2px;
|
||||
border: 1px solid #CCC;
|
||||
background-color: #DDD;
|
||||
cursor: pointer;
|
||||
outline: 0;
|
||||
line-height: 1.4em;
|
||||
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
.isso-postbox > .form-wrapper > .auth-section .post-action > input:hover {
|
||||
background-color: #CCC;
|
||||
}
|
||||
.isso-postbox > .form-wrapper > .auth-section .post-action > input:active {
|
||||
background-color: #BBB;
|
||||
}
|
||||
.isso-postbox > .form-wrapper .preview,
|
||||
.isso-postbox > .form-wrapper input[name="edit"],
|
||||
.isso-postbox.preview-mode > .form-wrapper input[name="preview"],
|
||||
.isso-postbox.preview-mode > .form-wrapper .textarea {
|
||||
display: none;
|
||||
}
|
||||
.isso-postbox.preview-mode > .form-wrapper .preview {
|
||||
display: block;
|
||||
}
|
||||
.isso-postbox.preview-mode > .form-wrapper input[name="edit"] {
|
||||
display: inline;
|
||||
}
|
||||
.isso-postbox > .form-wrapper .preview {
|
||||
background-color: #f8f8f8;
|
||||
background: repeating-linear-gradient(
|
||||
-45deg,
|
||||
#f8f8f8,
|
||||
#f8f8f8 10px,
|
||||
#fff 10px,
|
||||
#fff 20px
|
||||
);
|
||||
}
|
||||
.isso-postbox > .form-wrapper > .notification-section {
|
||||
display: none;
|
||||
padding-bottom: 10px;
|
||||
}
|
||||
@media screen and (max-width:600px) {
|
||||
.isso-postbox > .form-wrapper > .auth-section .input-wrapper {
|
||||
display: block;
|
||||
max-width: 100%;
|
||||
margin: 0 0 .3em;
|
||||
}
|
||||
.isso-postbox > .form-wrapper > .auth-section .input-wrapper input {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
<script data-isso="https://bbaovanc.com/isso/"
|
||||
data-isso-css="false"
|
||||
src="https://bbaovanc.com/isso/js/embed.min.js"></script>
|
||||
|
||||
<section id="isso-thread"></section>
|
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 17 KiB |
BIN
static/media/checkra1n-gui-on-arch-linux.png
Normal file
BIN
static/media/checkra1n-gui-on-arch-linux.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 33 KiB |
BIN
static/media/discord-tricks/edited-in-middle-of-message.png
Normal file
BIN
static/media/discord-tricks/edited-in-middle-of-message.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 5.8 KiB |
BIN
static/media/discord-tricks/sed-text-replacement.mov
Normal file
BIN
static/media/discord-tricks/sed-text-replacement.mov
Normal file
Binary file not shown.
Reference in New Issue
Block a user